Форум сайта python.su
Здравствуйте.
есть вопрос как правильно запихать в таб комбобокс или любой другой компонент,
получилось следущее но думаю не правильно)
# -*- coding: utf-8 -*- from PyQt4 import QtGui, QtCore from PyQt4.QtCore import Qt class MyWindow(QtGui.QWidget): def __init__(self,parent=None): QtGui.QWidget.__init__(self, parent) self.tab = QtGui.QTabWidget() self.comboBox = QtGui.QComboBox() self.comboBox.addItem(u"меню") self.tab.addTab(QtGui.QComboBox(self.comboBox), u"Вкладка &1") self.tab.addTab(QtGui.QComboBox(self.comboBox), u"Вкладка &2") self.tab.addTab(QtGui.QComboBox(self.comboBox), u"Вкладка &3") vbox = QtGui.QVBoxLayout() vbox.addWidget(self.tab) self.setLayout(vbox) @QtCore.pyqtSlot()
Офлайн
По-моему в документации достаточно ясно описано.
http://qt-project.org/doc/qt-5.0/qtabwidget.html#details
В вашем коде комбобокс создается с родителем комбобоксом. Это странно.
Сомневаюсь, что у вас будет один комбобокс в табе, поэтому нужно создать виджет, и с помощью Layout'ов накидать туда контролы. Причем если виджет сложный, и требует особой обработки данных, лучше сделать наследника QWidget.
Вот пример двух способов добавления: через наследника и простым добавлением в layout.
# -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui # Сложная страница со своей логикой и обработкой сигналов class ComplexPage(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.button = QtGui.QPushButton("Ok") self.combo = QtGui.QComboBox() layout = QtGui.QVBoxLayout() layout.addWidget(self.button) layout.addWidget(self.combo) self.setLayout(layout) #... class MainWidget(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.tab_widget = QtGui.QTabWidget(self) # добавим сложуню страницу self.tab_widget.addTab(ComplexPage(), 'page1') # контейнер с виджетами container = QtGui.QWidget() layout = QtGui.QHBoxLayout() # для простоты виджеты добавляются прм в контенер layout.addWidget(QtGui.QLabel('Some Label')) layout.addWidget(QtGui.QSpinBox()) # но можно добавить и свои, например, чтобы получать от них сигналы или данные self.some_edit = QtGui.QLineEdit() layout.addWidget(self.some_edit) container.setLayout(layout) self.tab_widget.addTab(container, 'page2') self.setLayout(QtGui.QVBoxLayout()) self.layout().addWidget(self.tab_widget) #... if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) widget = MainWidget() widget.resize(640, 480) widget.show() sys.exit(app.exec_())
Офлайн
Большое спасибо.
Офлайн
спасибо. Помогли ))
Офлайн
Совершенно не понятно, зачем создавать 2 класса, можно и в одном всё сделать.
Офлайн