用pythonw打开没有控制台的pyqt程序

时间:2013-12-27 15:47:51

标签: python user-interface pyqt pywin32

我有一个奇怪的问题。我创建了一个GUI程序,它在"spyder"中运行WinPython-64bit-3.3.2.3没有任何问题,现在我想在没有控制台弹出的情况下运行它,我尝试使用pythonw.exe

当我将我的GUI保存为gui.pyw时,我可以通过右键单击PythonWin并使用edit with PythonWin打开它,但只需双击即可使我的GUI弹出不到一秒钟然后退出程序。

这与我的GUI编程有关吗? “结构”就是这个:

import sys 
from PyQt4 import QtGui, QtCore, Qt  
from Main_Window_v2 import Ui_Dialog as Dlg

class MeinDialog(QtGui.QDialog, Dlg): 
    def __init__(self): 
        QtGui.QDialog.__init__(self) 
        self.setupUi(self)


        self.connect(self.buttonOK, 
            QtCore.SIGNAL("clicked()"), self.onOK) 
        self.connect(self.buttonAbbrechen, 
            QtCore.SIGNAL("clicked()"), self.onClose)                  
        self.connect(self.buttonsql, 
            QtCore.SIGNAL("clicked()"), self.onsql)

    def onsql(self):

        login=self.login_text_box.toPlainText()

        from calc import get_variables #sql query
        self.get_variables=get_variables(login)
        #calls a class´ __init__ in another file in my direcotry


    def onOK(self):
        login=self.login_text_box.toPlainText()

        self.get_variables.plot(login)
        #calls another function in my class "calc"
    def onClose(self): 
        print("bye!")
        self.close()

app = QtGui.QApplication(sys.argv) 
dialog = MeinDialog() 
dialog.show()

我还尝试使用.exe获取cx_freeze并尝试按照此处所述进行构建Cx_Freeze:我遇到了同样的问题:GUI的主窗口 弹出并再次消失

2 个答案:

答案 0 :(得分:0)

只需在代码末尾添加app.exec_()即可。您的代码在Spyder中运行良好,因为Spyder使用PyQt并且已经运行了主循环事件。

答案 1 :(得分:0)

您应该在代码末尾添加app.exex_(),它用于分派所有PyQt GUI线程消息或其他线程信息消息。