PyQt对话框 - 按下按钮后如何退出?

问题描述:

嗯,我正在写一个小型的PyQt4应用程序,它只是一个Yes/No对话框,它必须执行一个外部命令(例如'eject/dev/sr0')并退出。PyQt对话框 - 按下按钮后如何退出?

该应用程序运行后,按下“是”按钮后执行该命令,但执行该命令时无法让对话本身退出。

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 
import os 
import subprocess 
from PyQt4 import QtGui 
from PyQt4 import QtCore 
from subprocess import call 
cmd = 'eject /dev/sr0' 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self): 

     btn = QtGui.QPushButton('Yes', self)  
     btn.clicked.connect(lambda: os.system(cmd)) 
     btn.resize(180, 40) 
     btn.move(20, 35)  

     qbtn = QtGui.QPushButton('No', self) 
     qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit) 
     qbtn.resize(180, 40) 
     qbtn.move(20, 80) 

     self.setWindowTitle('Test')  
     self.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

这是我的代码。当我点击“是”时,它会正确调用'eject/dev/sr0'命令,但之后对话框仍然可见。我不得不点击“否”关闭应用程序,我希望它在执行命令时自动关闭。我应该添加/修改什么?

更换lambda: os.system(cmd)与函数/方法有多个语句。

def buttonClicked(self): 
    os.system(cmd) 
    QtCore.QCoreApplication.instance().quit() 

... 
    btn = QtGui.QPushButton('Yes', self)  
    btn.clicked.connect(self.buttonClicked) 
... 

btn.clicked.connect(self.close) 

这将是我的建议

+0

而这条简单的线是解决方案。谢谢。 – 2012-08-02 08:18:13

第一步:在主类必须建立一个 “连接”:

self.ui.closeButton.clicked.connect(self.closeIt) 

第二步:创建一个功能要关闭:

def closeIt(self): 
     self.close() 

我命名为“closeIt “是故意的,因为如果你把它命名为”关闭“,就会发生冲突。

如果创建的GUI是另一个程序的插件(如我的情况下QGIS),此解决方案的优点是,只有活动的GUI将被关闭,而不是整个程序。