Найти - Пользователи
Полная версия: Изменение строк combobox_2 в зависимости от выбора строк comboBox
Начало » GUI » Изменение строк combobox_2 в зависимости от выбора строк comboBox
1
Holden
Допустим меетсятся 3 типа: Type1, Type2, Type3. Каждый из типов имеет по 3 своих подтипа (Type1 - 1.1, 1.2, 1.3; Type2 - 2.1, 2.2, 2.3; Type3 - 3.1, 3.2, 3.3).
В окне 2 выпадающих списка: 1-й - с типами, 2- с подтипами.
Необходимо, чтоб при выборе одного из трёх типов 1-го combobox, в combobox_2 (выпадающий список подтипов) автоматически изменялись итемы на соответствующие своему типу.
с помощью designer и небольших дополнений получил такой код:

from PyQt4 import QtCore, QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(618, 197)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.comboBox = QtGui.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(40, 60, 91, 22))
self.comboBox.setObjectName(_fromUtf8("comboBox"))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox_2 = QtGui.QComboBox(self.centralwidget)
self.comboBox_2.setGeometry(QtCore.QRect(190, 60, 71, 22))
self.comboBox_2.setObjectName(_fromUtf8("comboBox_2"))
self.comboBox_2.addItem(_fromUtf8(""))
self.comboBox_2.setItemText(0, _fromUtf8(""))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(40, 40, 46, 13))
self.label.setObjectName(_fromUtf8("label"))
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(200, 40, 61, 16))
self.label_2.setObjectName(_fromUtf8("label_2"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 618, 20))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.comboBox.activated.connect(self.on_combo_activated)

def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Тип1", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Тип2", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "Тип3", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "Типы:", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Подтипы:", None, QtGui.QApplication.UnicodeUTF8))

def on_combo_activated (self, index):
self.types()

def types (self):
Type1 = ['1.1', '1.2', '1.3']
Type2 = ['2.1', '2.2', '2.3']
Type3 = ['3.1', '3.2', '3.3']
Type_list = [Type1, Type2, Type3]
index = self.comboBox.currentIndex()
Type = Type_list[index]

self.comboBox_2.insertItem(0, _fromUtf8((str(Type[0]))))
self.comboBox_2.insertItem(1, _fromUtf8((str(Type[1]))))
self.comboBox_2.insertItem(2, _fromUtf8((str(Type[2]))))

if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Для вставки строк в combobox_2 использовал метод insertItem. Проблема заключается в том, что после каждого нового выбора строк в 1-м вып.списке во 2-м каждый раз прибавляются новые строки к существующим. Мне нужно чтоб строки не прибавлялись, а заменялись на новые. Буду признателен, если подскажете.
unkier
вы батенька тонкий извращенец. это кто вас учил править файлы сгенеренные из ui файлов ?
Studentik
Holden
чтоб строки не прибавлялись, а заменялись на новые
http://doc.qt.nokia.com/4.7/qcombobox.html#setItemText
Holden
unkier
вы батенька тонкий извращенец. это кто вас учил править файлы сгенеренные из ui файлов ?
да как-то один комрад на форуме показал… а по сути вопроса можно чего-нибудь писнуть?
Holden
Studentik
http://doc.qt.nokia.com/4.7/qcombobox.html#setItemText
буду пробавть вместо insertItem вместо setItemText, если я правильно понял суть поста, хз :|.
unkier
всё есть в примерах http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/designer.html
наследуешь класс от того что там у тебя внизу (qdialog, qmainwindow, qwidget…), дальше делаешь что то типа
self.ui = Ui_ImageDialog()
self.ui.setupUi(self)

ну и в этом классе прописываешь свои слоты, вешаешь на сигналы от виджетов которые у тебя там есть после self.ui.setupUi(self) и вперед…
сгенеренный код править не надо никогда.

короче в доках по pyqt такто всё довольно внятно написано.
Holden
внятно для тех кто в теме, а те кто не в теме создают такие ветки на форумах)).
ладно, попробую разобраться, спасибо.
Holden
Таким же профанам как я, посвящается этот пост. Получилсь сделать то что хотел с помощью setItemText.

from PyQt4 import QtCore, QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(618, 197)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.comboBox = QtGui.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(40, 60, 91, 22))
self.comboBox.setObjectName(_fromUtf8("comboBox"))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox_2 = QtGui.QComboBox(self.centralwidget)
self.comboBox_2.setGeometry(QtCore.QRect(190, 60, 71, 22))
self.comboBox_2.setObjectName(_fromUtf8("comboBox_2"))
self.comboBox_2.addItem(_fromUtf8(""))
self.comboBox_2.addItem(_fromUtf8(""))
self.comboBox_2.addItem(_fromUtf8(""))

self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(40, 40, 46, 13))
self.label.setObjectName(_fromUtf8("label"))
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(200, 40, 61, 16))
self.label_2.setObjectName(_fromUtf8("label_2"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 618, 20))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.comboBox.activated.connect(self.on_combo_activated)

def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Тип1", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Тип2", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "Тип3", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "Типы:", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Подтипы:", None, QtGui.QApplication.UnicodeUTF8))

def on_combo_activated (self, index):
self.types()

def types (self):
Type1 = ['1.1', '1.2', '1.3']
Type2 = ['2.1', '2.2', '2.3']
Type3 = ['3.1', '3.2', '3.3']
Type_list = [Type1, Type2, Type3]
index = self.comboBox.currentIndex()
Type = Type_list[index]

self.comboBox_2.setItemText(0, _fromUtf8((str(Type[0]))))
self.comboBox_2.setItemText(1, _fromUtf8((str(Type[1]))))
self.comboBox_2.setItemText(2, _fromUtf8((str(Type[2]))))


if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
unkier
ты приумножил зло во вселенной :)
Holden
unkier
ты приумножил зло во вселенной :)
обещаю, я исправлюсь))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB