Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Изменение строк combobox_2 в зависимости от выбора строк comboBox [RSS Feed]

#1 Июнь 6, 2011 14:08:23

Holden
От:
Зарегистрирован: 2011-05-04
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

Допустим меетсятся 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-м каждый раз прибавляются новые строки к существующим. Мне нужно чтоб строки не прибавлялись, а заменялись на новые. Буду признателен, если подскажете.



Отредактировано (Июнь 6, 2011 14:09:16)

Офлайн

#2 Июнь 6, 2011 14:55:33

unkier
От:
Зарегистрирован: 2009-11-05
Сообщения: 92
Репутация: +  2  -
Профиль  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

вы батенька тонкий извращенец. это кто вас учил править файлы сгенеренные из ui файлов ?



Офлайн

#3 Июнь 6, 2011 15:06:31

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

Holden
чтоб строки не прибавлялись, а заменялись на новые
http://doc.qt.nokia.com/4.7/qcombobox.html#setItemText



Офлайн

#4 Июнь 6, 2011 15:11:06

Holden
От:
Зарегистрирован: 2011-05-04
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

unkier
вы батенька тонкий извращенец. это кто вас учил править файлы сгенеренные из ui файлов ?
да как-то один комрад на форуме показал… а по сути вопроса можно чего-нибудь писнуть?



Отредактировано (Июнь 6, 2011 15:12:04)

Офлайн

#5 Июнь 6, 2011 15:17:42

Holden
От:
Зарегистрирован: 2011-05-04
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

Studentik
http://doc.qt.nokia.com/4.7/qcombobox.html#setItemText
буду пробавть вместо insertItem вместо setItemText, если я правильно понял суть поста, хз :|.



Отредактировано (Июнь 6, 2011 15:22:11)

Офлайн

#6 Июнь 6, 2011 15:45:27

unkier
От:
Зарегистрирован: 2009-11-05
Сообщения: 92
Репутация: +  2  -
Профиль  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

всё есть в примерах 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 такто всё довольно внятно написано.



Офлайн

#7 Июнь 6, 2011 16:07:53

Holden
От:
Зарегистрирован: 2011-05-04
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

внятно для тех кто в теме, а те кто не в теме создают такие ветки на форумах)).
ладно, попробую разобраться, спасибо.



Офлайн

#8 Июнь 6, 2011 17:40:28

Holden
От:
Зарегистрирован: 2011-05-04
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

Таким же профанам как я, посвящается этот пост. Получилсь сделать то что хотел с помощью 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_())



Офлайн

#9 Июнь 6, 2011 20:48:02

unkier
От:
Зарегистрирован: 2009-11-05
Сообщения: 92
Репутация: +  2  -
Профиль  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

ты приумножил зло во вселенной :)



Офлайн

#10 Июнь 7, 2011 09:01:45

Holden
От:
Зарегистрирован: 2011-05-04
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение строк combobox_2 в зависимости от выбора строк comboBox

unkier
ты приумножил зло во вселенной :)
обещаю, я исправлюсь))



Офлайн

  • Начало
  • » GUI
  • » Изменение строк combobox_2 в зависимости от выбора строк comboBox[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version