在类__init__中创建的PyQt窗口不显示



如果我从__main__调用教程中的代码,它在PyQt5中运行良好

window = QWidget()
layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
window.setLayout(layout)
window.show()

如果我把代码类放在类的__init__中:

class MainWindow (QMainWindow):
def __init__ (self):
print ("HERE 1")
window = QWidget()
layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
window.setLayout(layout)
window.show()
print ("HERE 2")
return

则在__main__:中

app = QApplication (args)
mw = MainWindow.MainWindow ()
return app.exec_ ()

然后print状态发生,但没有显示窗口小部件。

为什么window在第二种情况下不显示?(相应的C++代码会显示它。(

您需要更多的代码来运行此程序。您正在尝试显示小部件窗口,但没有显示QmainWindow。如果小部件在QMainWindow上,当您显示主窗口时,它将可见。您还需要从QMainWindow类调用init来设置所有内容。最后,使用QMainWindow,您需要设置一个中心小部件。

我通常在main中采取不同的方法。看看我下面的代码:

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QPushButton
class MainWindow (QMainWindow):
def __init__ (self):
QMainWindow.__init__(self, parent=None)
print ("HERE 1")
window = QWidget()
layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
window.setLayout(layout)
self.setCentralWidget(window)
#window.show()
print ("HERE 2")
return
if __name__=="__main__":    
app = QApplication(sys.argv)
mw = MainWindow ()
mw.show()
sys.exit(app.exec_())

如果你想只显示小部件,而不是在QmainWindow上,试试这个:

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QPushButton
class MainWindow (QWidget):
def __init__ (self):
QWidget.__init__(self, parent=None)
print ("HERE 1")
layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
self.setLayout(layout)
print ("HERE 2")
if __name__=="__main__":    
app = QApplication(sys.argv)
mw = MainWindow ()
mw.show()
sys.exit(app.exec_())

最新更新