python - pyqt5 创建新窗口
问题描述
我正在尝试在按下 fieldE 按钮时创建新窗口,但它没有发生。Mapeditor() 类正在工作,所以我认为当我调用 fieldE.clicked.connection -function 时问题就出来了。有小费吗?
def startGpressed(name):
print(name)
def fieldeditorOPEN():
fieldScreen = Mapeditor()
def main():
app = QApplication(sys.argv)
ex = App()
buttons = ex.initUI()
startG = buttons[0]
fieldE = buttons[1]
startG.clicked.connect(lambda:(startGpressed("Game starting")))
fieldE.clicked.connect(partial(fieldeditorOPEN))
startG.show()
fieldE.show()
sys.exit(app.exec_())
main()
解决方案
函数中创建的变量会在函数执行完毕后被淘汰,所以即使显示窗口,也会在瞬间关闭并被淘汰。所以解决的办法就是延长它的生命周期,这样就可以创建为全局变量了:
fieldScreen = None
def fieldeditorOPEN():
global fieldScreen
fieldScreen = Mapeditor()
fieldScreen.show()
另一种选择是在 main 中创建 Mapeditor 并单击显示它:
# ...
fieldScreen = Mapeditor()
fieldE.clicked.connect(fieldScreen.show)
# ...
推荐阅读
- asp.net - 类型 webform1 未定义
- javascript - 使用 Python Eel 时从 firebase 更新数据而不刷新
- vue.js - 如何从具有相同 v-model 名称的多个单选按钮中获取单选按钮值?
- r - R中非结构化数据的Circos图
- javascript - 空变量和初始化变量之间的区别
- scala - 生成消息时,alpakka-kafka 连接器中使用的直通是什么?
- javascript - 如何设置图像轮播中可以显示的图像数量限制?(PHP)
- gnuplot - 在 Gnuplot 中为键设置自定义背景颜色
- java - 我的 java-server 后端代码需要部署在云端
- ajax - 发送 Mongo 结果作为对 Ajax 的响应