PyQT5睡觉前显示标签

时间:2018-10-04 11:15:36

标签: python pyqt pyqt5

我正在尝试为我的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()

1 个答案:

答案 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)