PyQt5程序不显示小部件

2024-09-28 16:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为expression evaluator编写一个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()

那我该怎么办?在


Tags: fromimportself程序defsyswindowpyqt5
2条回答

下面的代码运行得很好!!!!!!!!!!!!!!!在

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_())

在运行你的代码时,我的屏幕上显示了一个小部件,但是它的组件没有显示出来。与其设置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等,而不是整个qtwidget或QtCore。。。

相关问题 更多 >