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

PyQt - Tabbed dialog not displaying embedded widgets

我正在尝试使用 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_()

这是我对问题的解决方案

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)