首页 > 解决方案 > 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()

标签: pythonpyqt

解决方案


函数中创建的变量会在函数执行完毕后被淘汰,所以即使显示窗口,也会在瞬间关闭并被淘汰。所以解决的办法就是延长它的生命周期,这样就可以创建为全局变量了:

fieldScreen = None
def fieldeditorOPEN():
   global fieldScreen
   fieldScreen = Mapeditor()
   fieldScreen.show()

另一种选择是在 main 中创建 Mapeditor 并单击显示它:

 # ...
 fieldScreen = Mapeditor()
 fieldE.clicked.connect(fieldScreen.show)
 # ...

推荐阅读