簡體   English   中英

PyQt 對話框 - 如何在按下按鈕后退出?

[英]PyQt dialog - How to make it quit after pressing a button?

好吧,我正在編寫一個小的 PyQt4 應用程序,它只是一個是/否對話框,它必須執行一個外部命令(例如“eject /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()

這是我的代碼。 當我單擊“是”時,它會正確調用“eject /dev/sr0”命令,但此后對話框仍然可見。 我必須單擊“否”關閉應用程序,我希望它在執行命令時自動關閉。 我應該添加/修改什么?

btn.clicked.connect(self.close)

那將是我的建議

lambda: os.system(cmd)替換為具有多個語句的函數/方法。

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

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

Step1:在Main Class中需要建立一個“連接”:

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

Step2:創建一個類似關閉的函數:

def closeIt(self): 
        self.close()

我故意將其命名為“closeIt”,因為如果將其命名為“close”,則會發生沖突。

如果創建的 GUI 是另一個程序的插件(例如我的 QGIS),則此解決方案具有優勢,只有活動的 GUI 將關閉,而不是整個程序。

子類 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_()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM