1

私はpyqtとpythonの両方に慣れていないので、私の質問はばかげていると確信しているので、読んで答えてくれてありがとう。本当に助かります。

ここに私のソースコードがあります

# -*- coding: utf-8 -*-   
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
import sys  

QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
class Prog(QDialog):
    def __init__(self,parent=None):
        super(Prog,self).__init__(parent)
        self.start_P()
    def start_P(self):
        progressDialog=QProgressDialog(self)  
        progressDialog.setWindowModality(Qt.WindowModal)  
        progressDialog.setMinimumDuration(5)  
        progressDialog.setWindowTitle(self.tr("请等待"))  
        progressDialog.setLabelText(self.tr("拷贝..."))
        progressDialog.setCancelButtonText(self.tr("取消"))
        progressDialog.setRange(0,100)  
        progressDialog.setAutoClose(True)

        for i in range(101):  
            progressDialog.setValue(i)  
            QThread.msleep(10)  
            if progressDialog.wasCanceled():  
                return
        self.connect(progressDialog,SIGNAL("closed()"))
def main():

    app = QApplication(sys.argv)
    pp = Prog()
    pp.show()
    app.exec_()

if __name__ == '__main__':
    main()

漢字もありますが関係ありません。奇妙な部分は、このプログラムを実行すると、進行状況ダイアログのウィンドウが表示されることです。それが私が望んでいることです。しかし、それが自動的に閉じられると、pythonw ウィンドウが自動的に生成されます。

この pythonw ウィンドウが生成された理由に興味があり、それを回避する方法を知りたいです。

4

1 に答える 1

0

QProgressDialogこれは、 の子として作成しているためです。QDialogという行をチェックアウトしますprogressDialog=QProgressDialog(self)。この例がどのように機能するかを確認してください。

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

#---------
# IMPORT
#---------
from PyQt4 import QtGui, QtCore

#---------
# MAIN
#---------
class MyThread(QtCore.QThread):
    progress = QtCore.pyqtSignal(int)
    _stopped = False

    def __init__(self, parent=None):
        super(MyThread, self).__init__(parent)

    def stop(self):
        self._stopped = True

    def start(self):
        self._stopped = False

        super(MyThread, self).start()

    def run(self):           
        for progressNumber in range(101):
            self.progress.emit(progressNumber)
            self.msleep(22)

            if self._stopped:
                return

class MyWindow(QtGui.QProgressDialog):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.threadProgress = MyThread(self)
        self.threadProgress.progress.connect(self.setValue)

    def stop(self):
        self.threadProgress.stop()

    def start(self):
        self.threadProgress.start()

    def hideEvent(self, event):
        self.close()

if __name__ == "__main__":
    import sys

    codec = QtCore.QTextCodec.codecForName("utf8")
    QtCore.QTextCodec.setCodecForTr(codec)

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.setWindowTitle(main.tr("请等待"))  
    main.setLabelText(main.tr("拷贝..."))
    main.setCancelButtonText(main.tr("取消"))
    main.setRange(0,100)
    main.canceled.connect(main.stop)
    main.show()
    main.start()

    sys.exit(app.exec_())
于 2013-08-25T17:45:49.070 に答える