我有一个问题,我希望从一个使用GUI的Python程序中运行几个命令行函数。我不知道我的问题是特定于PyQt4还是与我对Python代码的误用有关。
我想做的是在我的GUI上有一个标签可以更改其文本值,以通知用户正在执行哪个命令。然而,当我使用for循环运行多个命令时,我的问题就出现了。我希望标签在每次循环时更新自己,但是程序却没有更新GUI标签,而是只在完成整个循环后更新自己,并显示最后一个被执行的命令。
我正在使用PyQt4作为我的GUI环境。我已经确认标签的文本变量确实在每次循环时得到更新,但是它并没有在GUI中可视化地显示出来。
有没有办法强制标签更新自己?我已经尝试在循环内部使用update()和repaint()方法,但它们没有产生任何区别。
我真的很感激任何帮助。谢谢。
这是我正在使用的代码:
我想做的是在我的GUI上有一个标签可以更改其文本值,以通知用户正在执行哪个命令。然而,当我使用for循环运行多个命令时,我的问题就出现了。我希望标签在每次循环时更新自己,但是程序却没有更新GUI标签,而是只在完成整个循环后更新自己,并显示最后一个被执行的命令。
我正在使用PyQt4作为我的GUI环境。我已经确认标签的文本变量确实在每次循环时得到更新,但是它并没有在GUI中可视化地显示出来。
有没有办法强制标签更新自己?我已经尝试在循环内部使用update()和repaint()方法,但它们没有产生任何区别。
我真的很感激任何帮助。谢谢。
这是我正在使用的代码:
# -*- 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_())
def run(self):
for i in commands:
win.label1.setText(i) os.system(i) - Ronny
start()
而不是run()
。 - Georg Schölly