代码之家  ›  专栏  ›  技术社区  ›  John

PyQt主窗口仅在子流程之后更新

  •  0
  • John  · 技术社区  · 6 年前

    我遇到了一个问题,我希望使用GUI从python程序运行几个命令行函数。我不知道我的问题是否是特定于 或者如果这与我对python代码的糟糕使用有关。

    我想做的是让GUI上的标签更改其文本值,以通知用户正在执行哪个命令。但是,当我使用 对于 全部的 循环已完成,并且仅显示最后执行的命令。

    我在GUI环境中使用PyQt4。我已经确定标签的文本变量确实随着每个循环而更新,但是,它实际上并没有在GUI中直观地显示出来。

    我有办法强迫标签自我更新吗?我已经试过了 更新()

    我真的很感激任何帮助。 非常感谢。

    罗尼。

    # -*- coding: utf-8 -*-
    import sys, os
    from PyQt4 import QtGui, QtCore
    Gui = QtGui
    Core = QtCore
    
    # ================================================== CREATE WINDOW OBJECT CLASS
    class Win(Gui.QWidget):
        def __init__(self, parent = None):
            Gui.QWidget.__init__(self, parent)
    
            # --------------------------------------------------- SETUP PLAY BUTTON
            self.but1 = Gui.QPushButton("Run Commands",self)
            self.but1.setGeometry(10,10, 200, 100)
    
            # -------------------------------------------------------- SETUP LABELS
            self.label1 = Gui.QLabel("No Commands running", self)
            self.label1.move(10, 120)
    
            # ------------------------------------------------------- SETUP ACTIONS
            self.connect(self.but1, Core.SIGNAL("clicked()"), runCommands)
    
    
    # =======================================================  RUN COMMAND FUNCTION
    def runCommands():
        for i in commands:
            win.label1.setText(i)       # Make label display the command being run
            print win.label1.text()     # This shows that the value is actually
                                        # changing with every loop, but its just not
                                        # being reflected in the GUI label
            os.system(i)
    
    # ======================================================================== MAIN
    
    # ------------------------------------------------------  THE TERMINAL COMMANDS
    com1 = "espeak 'senntence 1'"
    com2 = "espeak 'senntence 2'"
    com3 = "espeak 'senntence 3'"
    com4 = "espeak 'senntence 4'"
    com5 = "espeak 'senntence 5'"
    commands = (com1, com2, com3, com4, com5)
    
    # --------------------------------------------------- SETUP THE GUI ENVIRONMENT
    app = Gui.QApplication(sys.argv)
    win = Win()
    win.show()
    
    sys.exit(app.exec_())
    
    0 回复  |  直到 16 年前