2
我有一個主窗口,我想在按鈕按下時打開另一個窗口(不是對話框)。我的問題是新窗口打開後幾乎立即關閉。我已經閱讀了可用的文章,並試圖實施解決方案,但似乎沒有運氣。這是我的整個代碼:PyQt:爲什麼新窗口在打開後立即關閉
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MainWindow (QMainWindow):
def __init__(self):
win = QWidget()
win.adjustSize()
grid=QGridLayout()
grid.setRowStretch(0, 1)
grid.setRowStretch(1, 1)
grid.setRowStretch(5, 1)
for i in range(0,5):
for j in range(0,4):
if i==0 and j==2:
l1=grid.addWidget(QLabel("Choose an option:"),i,j, 2, 2)
if i==2 and j==1:
b1= QPushButton("Get Best Match")
grid.addWidget(b1,i,j)
elif i==2 and j==2:
b2=QPushButton("Button2")
grid.addWidget(b2,i,j)
elif i==2 and j==3:
b3=QPushButton("Button3")
grid.addWidget(b3,i,j)
b5=grid.addWidget(QLabel(""),3,4)
b4=QPushButton("Button4")
grid.addWidget(b4,2,4)
w1=b1.clicked.connect(window1)
b2.clicked.connect(Win2)
b3.clicked.connect(Win3)
b4.clicked.connect(Win4)
win.setLayout(grid)
win.setGeometry(100,100,width//2,height//2,)
win.setWindowTitle("PYQT")
win.show()
win.setStyleSheet("""
.QPushButton {
height: 30px ;
width: 20px ;
}
.QLabel {
qproperty-alignment: AlignCenter;
font-size:12pt
}
""")
sys.exit(app.exec_())
class window1():
def __init__(self, pressed):
super(window1, self).__init__()
win1 = QWidget()
win1.adjustSize()
win1.setGeometry(100,100,width//2,height//2,)
win1.setWindowTitle("Get Best Match")
win1.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
screen_resolution = app.desktop().screenGeometry()
width, height = screen_resolution.width(), screen_resolution.height()
main=MainWindow()
有人可以幫我這個嗎?我一直在困擾一段時間。
我的問題是,當我點擊按鈕GetBestMatch,新窗口打開了第二個,然後關閉。但主窗口始終保持打開狀態(我想要的)。我實施了您所建議的更改,但似乎沒有工作 – Sarah
好的,您不清楚您指的是哪個窗口。仔細檢查你的問題是雙重的。首先,您遇到了與我在「get best match」按鈕引用的'window1'類中描述的相同的問題。另一個問題是在連接信號時你傳遞了類名。這基本上是將類構造函數作爲一個插槽傳遞,它再次丟棄新創建的窗口。您需要連接到一個創建窗口並存儲引用的函數 – user3419537
此外,'sys.exit(app.exec _())'內的'app.exec _()'啓動Qt事件循環。它不應該在任何班級內。將它移動到代碼的末尾 – user3419537