如果我从__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_())