我正在尝试为我的python代码创建一个GUI。我遇到了一个问题,在这里我想显示一个标签,上面写着“请等待”,并与此并列,我想睡眠我的代码为1.25s。然而,它没有显示标签就进入了睡眠状态。在我看来,它似乎“跳过”了.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()发布于 2018-10-04 12:36:44
正如您所说的,self.varakozas是QLabel,所以我预测它是您窗口的孩子。
如果您调用show(),Qt将只为该小部件调度画图事件,而call事件则由事件循环调用。一旦完成此方法的执行,就会执行事件循环。所以睡眠首先被称为睡眠,因为它是在范围结束之前。这是Qt事件循环环境的标准行为。
但有个解决办法。您可以通过repaint()方法手动调用画图事件。
试试这个:
def status_check(self):
self.varakozas.setText("Please wait...")
self.varakozas.show()
self.repaint()
time.sleep(1.25)https://stackoverflow.com/questions/52645352
复制相似问题