【问题标题】:Python working with Qt, event loopPython 使用 Qt,事件循环
【发布时间】:2014-01-10 01:26:21
【问题描述】:

我的事件循环有问题。为了理解,我想更新 Label/textBrowser/lineEdit 在未按下停止按钮时某个循环期间的文本。

def __init__(self):
    QtGui.QMainWindow.__init__(self)
    self.ui = Ui_MainWindow()
    self.ui.setupUi(self)
    self.ui.btnStart.clicked.connect(self.btnStart_Clicked)
    self.ui.btnStop.clicked.connect(self.btnStop_Clicked)
    self.startTime = dt.datetime(2013, 1, 1, 0, 0, 0)
    self.nowTime = dt.datetime(2013, 1, 1, 0, 0, 0)
    self.ui.lineStart.setText(self.startTime.strftime("%Y-%m-%d %H:%M"))
    self.ui.lineNow.setText(self.nowTime.strftime("%Y-%m-%d %H:%M"))
    self.ui.textBrowser.setText(self.nowTime.strftime("%Y-%m-%d %H:%M"))



def btnStart_Clicked(self):
    print(12)
    while (not self.btnStop_Clicked()):
        print(23)
        self.nowTime += dt.timedelta(minutes = 25)
        self.ui.textBrowser.setText(self.nowTime.strftime("%Y-%m-%d %H:%M"))
        time.sleep(2)

【问题讨论】:

  • 您面临的问题是什么?

标签: python qt pydev


【解决方案1】:

Qt 在空闲时更新它的 Gui。为了克服这个问题,您应该使用线程或产生您的更新功能,例如通过使用计时器来更新。下面是我用来每 100 毫秒重新安排一次更新的一些代码。用例与您的相似。

    self.timer = QtCore.QTimer(self.wid)
    self.timer.timeout.connect(self.UpdateTab)
    self.timer.start(100)  

【讨论】:

    【解决方案2】:

    要请求立即更新,请使用processEvents

    while (not self.btnStop_Clicked()):
        self.nowTime += dt.timedelta(minutes = 25)
        self.ui.textBrowser.setText(self.nowTime.strftime("%Y-%m-%d %H:%M"))
        QtGui.qApp.processEvents()
        time.sleep(2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      相关资源
      最近更新 更多