我正在尝试为我的python代码创建一个GUI。 我遇到一个问题,我想显示一个标签为“请稍候”的文本,并与此并行,我想将我的代码休眠1.25秒。 但是,它没有显示标签就进入睡眠状态。在我看来,它以某种方式“跳过” .show()
以下是代码段:
def status_check(self):
self.varakozas.setText("Please wait...")
self.varakozas.show()
time.sleep(1.25)
sudoPassword = self.sudopassword.text()
command = "some command"
passtmeg = "echo '"+sudoPassword+"' | sudo -S "+command
line = subprocess.Popen(["bash", "-c", passtmeg],stdout=subprocess.PIPE,shell=True)
status_of = str(line.communicate()[0])
status_of_to_log = status_of.translate({ord(translate_table): "" for translate_table in "'b"})
logging.info('Status: '+ status_of_to_log[:-2])
if ("xy" in status_of) or ("Starting" in status_of):
self._status.setText("xy is running")
self.varakozas.hide()
else:
self._status.setText("xy is stopped")
self.varakozas.hide()
答案 0 :(得分:-1)
正如您所说的self.varakozas是QLabel,所以我预测它是您窗口的子项。
如果您调用show()
,Qt将仅计划此小部件的绘画事件,并且绘画事件由事件循环调用。一旦执行完此方法,便会执行事件循环。因此,首先调用睡眠,因为它是在作用域结束之前。这是Qt事件循环环境的标准行为。
但是有一种解决方法。您可以通过repaint()
方法手动调用绘画事件。
尝试一下:
def status_check(self):
self.varakozas.setText("Please wait...")
self.varakozas.show()
self.repaint()
time.sleep(1.25)