首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python更新QtGui元素

从python更新QtGui元素
EN

Stack Overflow用户
提问于 2015-11-04 21:34:33
回答 1查看 129关注 0票数 0

我用QT和Python写了一个小应用程序。我按下一个按钮,等待串行输入5秒钟。我有几个标签想要更新,例如,当我按下按钮时,它应该更改为“开始阅读”,当我返回时,它应该更改为“阅读完成”。我使用了一个简单的线程,它调用processEvents,但它不会更新,当read函数完成时,我看到最后一个标签更改。

代码语言:javascript
复制
class MyWindow(QtGui.QMainWindow):

  def __init__(self):
    print 'myWindow'
    super(MyWindow, self).__init__()
    uic.loadUi('test1.ui', self)
    QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL ('clicked()'), self.buttonStartClicked)
    self.show()



  def buttonStartClicked(self):
    thread = threading.Thread(target = self.update_gui, args = ())
    thread.daemon = True
    thread.start()
    self.label.setText('Starting Test')
    response = sRS232_Con.read()
    #QtGui.QApplication.processEvents()
    self.label.setText('Ending Test')


  def update_gui(self):
    while True :
      QtGui.QApplication.processEvents()
      print 'update'
      time.sleep(1)


def main():
  app = QtGui.QApplication(sys.argv)
  window = MyWindow()
  sys.exit(app.exec_())

if __name__ == '__main__':
   main()
EN

回答 1

Stack Overflow用户

发布于 2015-11-05 23:06:57

在Qt中,由某个事件循环管理的任何QObject都不应该被其他线程接触(至少在没有任何保护的情况下)。

如果由于某种原因您不能使用为串行端口提供异步QSerialPort库,则可以将QThread用于由Qt信号和插槽管理的单独线程。

QtGui的事件由主线程(在循环app.exec_()的内部)分派。另一个QThread可以与串口一起工作,它可以在'Starting Test''Ending Test'上发出信号。这些信号可以连接到能够更新主线程中的UI的MyWindow插槽。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33523285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档