PyQt - 选项卡式对话框不显示嵌入的小部件

时间:2016-08-17 23:31:48

标签: python pyqt4 tabwidget

我正在尝试使用PyQt创建一个包含三个选项卡的对话框。但是,我很生气,因为虽然显示了对话框,但是不显示嵌入的小部件!我想这是一个非常简单的问题,有一个相应的非常简单的解决方案,但我很惊讶!任何人都可以提示吗?提前谢谢!

到目前为止,这是我的代码:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class TabbedDialog(QDialog):
   def __init__(self, parent = None):
      super(TabbedDialog, self).__init__(parent)

      self.tabWidget = QTabWidget()
      self.tabWidget.tab1 = QWidget()
      self.tabWidget.tab2 = QWidget()
      self.tabWidget.tab3 = QWidget()

      self.tabWidget.addTab(self.tabWidget.tab1,"Tab 1")
      self.tabWidget.addTab(self.tabWidget.tab2,"Tab 2")
      self.tabWidget.addTab(self.tabWidget.tab3,"Tab 3")
      self.tab1UI()
      self.tab2UI()
      self.tab3UI()
      self.setWindowTitle("tab demo")

   def tab1UI(self):
      layout = QFormLayout()
      layout.addRow("Name",QLineEdit())
      layout.addRow("Address",QLineEdit())
      self.tabWidget.setTabText(0,"Contact Details")
      self.tabWidget.tab1.setLayout(layout)

   def tab2UI(self):
      layout = QFormLayout()
      sex = QHBoxLayout()
      sex.addWidget(QRadioButton("Male"))
      sex.addWidget(QRadioButton("Female"))
      layout.addRow(QLabel("Sex"),sex)
      layout.addRow("Date of Birth",QLineEdit())
      self.tabWidget.setTabText(1,"Personal Details")
      self.tabWidget.tab2.setLayout(layout)

   def tab3UI(self):
      layout = QHBoxLayout()
      layout.addWidget(QLabel("subjects")) 
      layout.addWidget(QCheckBox("Physics"))
      layout.addWidget(QCheckBox("Maths"))
      self.tabWidget.setTabText(2,"Education Details")
      self.tabWidget.tab3.setLayout(layout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = TabbedDialog()
    retval = form.exec_()

1 个答案:

答案 0 :(得分:1)

这是我解决问题的方法

init 方法中,我声明了一个布局,然后将'tabWidget'小部件添加到该布局中,并将该布局设置为QDialog的布局。

def __init__(self, parent = None):
  super(TabbedDialog, self).__init__(parent)

  self.tabWidget = QTabWidget()
  self.tabWidget.tab1 = QWidget()
  self.tabWidget.tab2 = QWidget()
  self.tabWidget.tab3 = QWidget()

  self.tabWidget.addTab(self.tabWidget.tab1,"Tab 1")
  self.tabWidget.addTab(self.tabWidget.tab2,"Tab 2")
  self.tabWidget.addTab(self.tabWidget.tab3,"Tab 3")
  self.tab1UI()
  self.tab2UI()
  self.tab3UI()
  self.setWindowTitle("tab demo")

  # Here is the addition to the code.
  mainLayout = QVBoxLayout()
  mainLayout.addWidget(self.tabWidget)
  self.setLayout(mainLayout)