簡體   English   中英

pyqt4中的線程錯誤

[英]Error with thread in pyqt4

我有問題。 我創建了線程,然后從那里打開新窗口。 但這行不通。

import sys
from grab import Grab
from PyQt4 import QtGui, QtCore
class Requests(QtCore.QThread):
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)

    def run(self):
        # here some comands
        self.emit(QtCore.SIGNAL("mysignal(QString)"), 'open')

class window(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)

        self.setGeometry(100, 100, 500, 200)
        self.setWindowTitle('Window')
        self.label = QtGui.QLabel(u'Hello')
        self.Layout = QtGui.QVBoxLayout()
        self.Layout.addWidget(self.label)
        self.setLayout(self.Layout)

        self.c = Requests()
        self.c.start()
        self.connect(self.c, QtCore.SIGNAL("mysignal(QString)"), self.open_window, QtCore.Qt.QueuedConnection)

    def open_window(self):
        print 'open modal window'
        modal_w = popup_window()
        modal_w.show()

app = QtGui.QApplication(sys.argv)
main = window()
main.show()
sys.exit(app.exec_())

它不顯示新窗口。 錯誤在哪里?

您需要在線程啟動之前(因此在發出信號之前)連接信號。 如果要在工作線程完成時顯示對話框,請使用finished信號:

class Requests(QtCore.QThread):    
    def run(self):
        # do some work...
        print 'work finished'

    ...
    self.c = Requests()
    self.c.finished.connect(self.open_window)
    self.c.start()

在插槽中打開對話框時,還需要保留對對話框的引用:

    def open_window(self):
        print 'open modal window'
        self.modal_w = popup_window()
        self.modal_w.show()

暫無
暫無

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

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