【问题标题】:PyQt dialog - How to make it quit after pressing a button?PyQt 对话框 - 如何在按下按钮后退出?
【发布时间】:2012-07-31 03:19:50
【问题描述】:

好吧,我正在编写一个小型 PyQt4 应用程序,它只是一个“是/否”对话框,必须执行外部命令(例如“弹出 /dev/sr0”)并退出。

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

#!/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()

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

【问题讨论】:

    标签: python dialog pyqt


    【解决方案1】:
    btn.clicked.connect(self.close)
    

    这是我的建议

    【讨论】:

      【解决方案2】:

      lambda: os.system(cmd) 替换为具有多个语句的函数/方法。

      def buttonClicked(self):
          os.system(cmd)
          QtCore.QCoreApplication.instance().quit()
      
      ...
          btn = QtGui.QPushButton('Yes', self)     
          btn.clicked.connect(self.buttonClicked)
      ...
      

      【讨论】:

        【解决方案3】:

        Step1:在主类中需要建立一个“连接”:

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

        Step2:创建一个类似于关闭的函数:

        def closeIt(self): 
                self.close()
        

        我故意将其命名为“closeIt”,因为如果您将其命名为“close”,则会发生冲突。

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

        【讨论】:

          【解决方案4】:

          子类 QDialog() 然后使用你的对象关闭它。

          class Dialog(QDialog):
              """
                  Subclassing QDialog class.
              """
              def __init__(self):
                  QDialog.__init__(self)
          
              def close_clicked(self):
                  self.close()
          

          在你的主函数中编写以下代码

          dialogbox = Dialog()  # we subclasses QDialog into Dialog
          b1= QPushButton("Close",dialogbox)
          b1.clicked.connect(dialogbox.close_clicked)
          dialogbox.exec_()
          

          【讨论】:

            猜你喜欢
            • 2011-01-22
            • 1970-01-01
            • 2012-05-07
            • 1970-01-01
            • 1970-01-01
            • 2015-11-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多