python - 我创建的页面立即打开和关闭
问题描述
我想在按下按钮时打开第二个窗口。窗口立即打开和关闭。有人知道我做错了什么吗?
这是我的代码:
import sys
from PyQt5 import QtGui
from PyQt5.QtWidgets import QMainWindow, QPushButton, QLabel, QApplication
class FirstWindow(QMainWindow):
def __init__(self):
super(FirstWindow, self).__init__()
self.setGeometry(50, 50, 500, 300)
self.setWindowTitle('It\'s working!')
self.initUI()
def initUI(self):
second_screen_btn = QPushButton('Open second screen', self)
second_screen_btn.setGeometry(250, 100, 100, 100)
second_screen_btn.clicked.connect(self.open_second_screen)
self.show()
def open_second_screen(self):
second_window = SecondWindow()
class SecondWindow(QMainWindow):
def __init__(self):
super(SecondWindow, self).__init__()
self.setGeometry(100, 100, 500, 300)
self.setWindowTitle('This is a second window')
self.initUI()
def initUI(self):
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = FirstWindow()
sys.exit(app.exec_())
解决方案
只需将您的更改open_second_screen
为:
def open_second_screen(self):
self.second_window = SecondWindow()
self.second_window.show()
(当然,从其他类中删除 self.show() )
这是 PyQt 经常出现的问题。如果新窗口没有存储在变量中,则会被垃圾回收,并且该second_window
变量在函数结束时被删除,除非您将其存储为窗口实例的参数。
推荐阅读
- php - 如何滚动组合框的列表以在 Selenium php-webdriver 中显示选项?
- javascript - 剑道网格不显示所有数据/列
- arrays - 这些数组声明之间的区别?
- azure - 在 Github Profile Activity 上显示 Azure 存储库的活动
- javascript - discord.js 以及我是否需要 2 个 bot.logins?
- c# - NServicebus 和 NLog
- cron - 构建一个 cron 表达式以在定义的分钟内运行并且只运行一次(不可重复)
- python-2.7 - 如何从“timedelta 对象”中仅提取 HH:MM:SS 格式的时间
- c - 完美数字:为什么嵌套的 if 不起作用?
- javascript - 更新事件后的传单 svg