PyQt5程序不显示小部件

时间:2017-07-31 03:34:23

标签: python python-3.x pyqt pyqt5

我正在为表达式评估程序编写一个pyqt5程序,但在运行程序后,我无法看到任何小部件并获得空白窗口

def expressionevaluator():  
    import sys
    from PyQt5 import QtWidgets
    from PyQt5 import QtCore
    from PyQt5 import QtGui

    from PyQt5.QtWidgets import QApplication, QWidget,QMainWindow


    class Window(QtWidgets.QMainWindow):
        def __init__(self):
            super(Window,self).__init__()
            self.setGeometry(50,50,500,300)
            self.setWindowTitle("PyQt Tutorial")
            self.setWindowIcon=QtGui.QIcon('pyqt_example2.PNG')
            self.home()


        def ExitForm(self):
            sys.exit()

        def home(self):
            vbox=QtWidgets.QVBoxLayout()
            textbrowser=QtWidgets.QTextBrowser()
            lineedit=QtWidgets.QLineEdit()
            btn=QtWidgets.QPushButton("QUIT")
            btn.clicked.connect(self.close)
            vbox.addWidget(textbrowser)
            vbox.addWidget(lineedit)
            vbox.addWidget(btn)
            self.setLayout(vbox)
            self.show()


    if __name__=="__main__":        
        app=QApplication(sys.argv)
        GUI=Window()
        sys.exit(app.exec_())
expressionevaluator()

那我该怎么办?

2 个答案:

答案 0 :(得分:1)

只是运行你的代码我在屏幕上显示了一个小部件,但它的组件没有显示出来。而不是设置QMainWindow的布局尝试让中央窗口小部件(QWidget)使用其组件设置其布局,而不是使用此窗口小部件设置QMainWindow中央窗口小部件。你去了,现在你们都工作得很好。

您遇到布局问题,因为QMainWindow的行为与其他窗口小部件不同,它有自己的布局和许多其他默认行为,中央窗口小部件是您在主窗口中没有显示任何内容的原因。

def expressionevaluator():
    import sys

    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWidgets import QLineEdit
    from PyQt5.QtWidgets import QMainWindow
    from PyQt5.QtWidgets import QPushButton
    from PyQt5.QtWidgets import QTextBrowser
    from PyQt5.QtWidgets import QVBoxLayout
    from PyQt5.QtWidgets import QWidget



    class Window(QMainWindow):
        def __init__(self):
            super(Window,self).__init__()
            self.setGeometry(50,50,500,300)
            self.setWindowTitle("PyQt Tutorial")
            self.setWindowIcon = QIcon('pyqt_example2.PNG')
            self.home()


        def ExitForm(self):
            sys.exit()

        def home(self):
            vbox = QVBoxLayout()
            textbrowser = QTextBrowser()
            lineedit = QLineEdit()
            btn = QPushButton("QUIT")
            central_widget = QWidget()
            central_widget.setLayout(vbox)
            btn.clicked.connect(self.close)
            vbox.addWidget(textbrowser)
            vbox.addWidget(lineedit)
            vbox.addWidget(btn)
            self.setCentralWidget(central_widget)
            self.show()


    if __name__=="__main__":
        app = QApplication(sys.argv)
        GUI = Window()
        GUI.show()
        sys.exit(app.exec_())
expressionevaluator()

注意: 您可以执行的代码结构有很多改进,我只是尽可能地改变它以使其工作,例如尝试不导入所有模块一次,导入你需要的例如QIcon,QLineEdit等,而不是整个QtWidgets,或QtCore ......

答案 1 :(得分:0)

以下代码效果很好!!!!!!!!!!!!!!!

import sys



from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QTextBrowser
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QWidget



class Window(QMainWindow):
    def __init__(self):
            super(Window,self).__init__()
            self.setGeometry(50,50,500,300)
            self.setWindowTitle("PyQt Tutorial")
            self.setWindowIcon = QIcon('pyqt_example2.PNG')
            self.home()

def ExitForm(self):
        sys.exit()

def home(self):
        vbox = QVBoxLayout()
        textbrowser = QTextBrowser()
        lineedit = QLineEdit()
        btn = QPushButton("QUIT")
        central_widget = QWidget()
        central_widget.setLayout(vbox)
        btn.clicked.connect(self.ExitForm)
        vbox.addWidget(textbrowser)
        vbox.addWidget(lineedit)
        vbox.addWidget(btn)
        self.setCentralWidget(central_widget)
        self.show()


if __name__=="__main__":
    app = QApplication(sys.argv)
    GUI = Window()
    GUI.show()
    sys.exit(app.exec_())