首页 > 解决方案 > PyQt5:设置中央小部件

问题描述

我无法添加到我的 PyQt5 程序的中央小部件。我知道中央小部件可以是 的任何子类QWidget,但是当我尝试导入QWidget子类并将其用作我的中央小部件时出现错误。

这是我的QMainWindow

import sys, os
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import (QApplication, QWidget, QMainWindow, QAction, qApp,QMenu, 
        QFileDialog, QTableWidget,QTableWidgetItem,QVBoxLayout,QTabWidget,QSizePolicy,QHBoxLayout,QTextEdit)
from PyQt5.QtGui import QIcon
import pandas as pd
from PyQt5.QtCore import pyqtSlot
import central_widget_example

class main(QMainWindow):
    def __init__(self):
        super(main, self).__init__()
        self.initUI()

    #initial window at launch
    def initUI(self):                
        self.statusBar().showMessage('Tool')
        #self.setGeometry(300, 300, 250, 150)
        self.resize(1000,500)
        self.move(300,300)
        self.setWindowTitle('Tool')
        self.setWindowIcon(QtGui.QIcon('icon3.png'))
        #Define and set central widget
        self.setCentralWidget(central_widget_example.stackedExample)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = main()
    app.exec_()

这是我正在导入并尝试添加到中央小部件的 central_widget_example 模块

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class stackedExample(QWidget):

   def __init__(self):
      super(stackedExample, self).__init__()
      self.leftlist = QListWidget ()
      self.leftlist.insertItem (0, 'Contact' )
      self.leftlist.insertItem (1, 'Personal' )
      self.leftlist.insertItem (2, 'Educational' )

      self.stack1 = QWidget()
      self.stack2 = QWidget()
      self.stack3 = QWidget()

      self.stack1UI()
      self.stack2UI()
      self.stack3UI()

      self.Stack = QStackedWidget (self)
      self.Stack.addWidget (self.stack1)
      self.Stack.addWidget (self.stack2)
      self.Stack.addWidget (self.stack3)

      hbox = QHBoxLayout(self)
      hbox.addWidget(self.leftlist)
      hbox.addWidget(self.Stack)

      self.setLayout(hbox)
      self.leftlist.currentRowChanged.connect(self.display)
      self.setGeometry(300, 50, 10,10)
      self.setWindowTitle('StackedWidget demo')
      self.show()

   def stack1UI(self):
      layout = QFormLayout()
      layout.addRow("Name",QLineEdit())
      layout.addRow("Address",QLineEdit())
      #self.setTabText(0,"Contact Details")
      self.stack1.setLayout(layout)

   def stack2UI(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.stack2.setLayout(layout)

   def stack3UI(self):
      layout = QHBoxLayout()
      layout.addWidget(QLabel("subjects"))
      layout.addWidget(QCheckBox("Physics"))
      layout.addWidget(QCheckBox("Maths"))
      self.stack3.setLayout(layout)

   def display(self,i):
      self.Stack.setCurrentIndex(i)

def main():
   app = QApplication(sys.argv)
   ex = stackedExample()
   sys.exit(app.exec_())

if __name__ == '__main__':
   main()

这会产生错误:setCentralWidget(self, QWidget): argument 1 has unexpected type 'sip.wrappertype'

标签: python-3.xpyqt5

解决方案


推荐阅读