无法从其他线程停止计时器-移开焦点

穆斯塔法AHCI
import sys

from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit

class Worker(QThread):

    def __init__(self, textBox):
        super().__init__()
        self.textBox = textBox

    def run(self):
        while True:
            if self.textBox.text() == "close":
                app.quit()
                break

            if self.textBox.text() == "removeFocus":
                self.textBox.clearFocus()

class window(QWidget):
    def __init__(self):
        super().__init__()

        vBox = QVBoxLayout()
        self.setLayout(vBox)
        self.resize(600, 400)

        textBox = QLineEdit()
        vBox.addWidget(textBox)

        worker = Worker(textBox)
        worker.start()

        self.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = window()
    sys.exit(app.exec())

当我在文本框中键入“ close ”时,它可以很好地工作,但是当我键入“ removeFocus ”时,它仍然可以工作,但出现此错误:

QObject::killTimer: Timers cannot be stopped from another thread

即使程序正在运行,为什么也会出现这样的错误?

(由于我想做的过程非常简单,所以我认为我不能做很多细节。我刚刚开始学习Python。这是我第一次使用此网站。很抱歉,创建帖子时出错(谢谢)

永乐

在Qt中,您不能从其他线程访问或修改GUI信息(有关更多信息,请参阅信息),因为它不能保证它可以正常工作(GUI元素不是线程安全的),幸运的是,您没有问题,但是它实际使用您的方法很危险。

在您的情况下,也不必使用线程,因为使用QLineEdit中的textChanged信号就足够了。

import sys

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit


class Window(QWidget):
    def __init__(self):
        super().__init__()

        vBox = QVBoxLayout(self)
        self.resize(600, 400)

        self.textBox = QLineEdit()
        vBox.addWidget(self.textBox)

        self.textBox.textChanged.connect(self.on_text_changed)

    @pyqtSlot(str)
    def on_text_changed(self, text):
        if text == "close":
            QApplication.quit()
        elif text == "removeFocus":
            self.textBox.clearFocus()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec())

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法从其他线程启动计时器

来自分类Dev

从其他班级停止计时器

来自分类Dev

当用户按ESC时移开焦点

来自分类Dev

单击后从按钮上移开焦点

来自分类Dev

如何使用其他功能停止计时器

来自分类Dev

无法将元素从HTML文件中的其他元素移开?

来自分类Dev

无法将元素从HTML文件中的其他元素移开?

来自分类Dev

禁用键盘快捷键(以前是:将焦点从键盘移开)

来自分类Dev

禁用键盘快捷键(以前是:将焦点从键盘移开)

来自分类Dev

从Windows 10 Core-XAML上的按钮上移开焦点

来自分类Dev

游戏失去焦点后计时器不再恢复

来自分类Dev

计时器到期后如何从UIButton移除焦点(tvOS)

来自分类Dev

游戏失去焦点后计时器不再恢复

来自分类Dev

无法停止javax swing计时器

来自分类Dev

计时器停止时无法恢复

来自分类Dev

停止计时器并从其他功能重新启动它

来自分类Dev

如何从按钮上移开焦点,以便按空格键或Enter不会触发按钮?

来自分类Dev

跟踪用户何时返回应用程序或将焦点从Mac Catalyst窗口移开

来自分类Dev

反应:将焦点从转义键上的输入元素上移开

来自分类Dev

从文本框中移开焦点时如何避免自动回发文本框

来自分类Dev

如何从按钮上移开焦点,以便按空格键或Enter不会触发按钮?

来自分类Dev

Python进程线程启动和停止计时器

来自分类Dev

线程计时器,中断睡眠(停止睡眠)

来自分类Dev

当窗口失去焦点时,Vb.NET禁用计时器

来自分类Dev

在Python中停止计时器后,计时器无法重新启动

来自分类Dev

在Python中停止计时器后,计时器无法重新启动

来自分类Dev

在执行其他命令时运行计时器C ++

来自分类Dev

计时器功能不会接受其他参数

来自分类Dev

在执行其他命令时运行计时器

Related 相关文章

  1. 1

    无法从其他线程启动计时器

  2. 2

    从其他班级停止计时器

  3. 3

    当用户按ESC时移开焦点

  4. 4

    单击后从按钮上移开焦点

  5. 5

    如何使用其他功能停止计时器

  6. 6

    无法将元素从HTML文件中的其他元素移开?

  7. 7

    无法将元素从HTML文件中的其他元素移开?

  8. 8

    禁用键盘快捷键(以前是:将焦点从键盘移开)

  9. 9

    禁用键盘快捷键(以前是:将焦点从键盘移开)

  10. 10

    从Windows 10 Core-XAML上的按钮上移开焦点

  11. 11

    游戏失去焦点后计时器不再恢复

  12. 12

    计时器到期后如何从UIButton移除焦点(tvOS)

  13. 13

    游戏失去焦点后计时器不再恢复

  14. 14

    无法停止javax swing计时器

  15. 15

    计时器停止时无法恢复

  16. 16

    停止计时器并从其他功能重新启动它

  17. 17

    如何从按钮上移开焦点,以便按空格键或Enter不会触发按钮?

  18. 18

    跟踪用户何时返回应用程序或将焦点从Mac Catalyst窗口移开

  19. 19

    反应:将焦点从转义键上的输入元素上移开

  20. 20

    从文本框中移开焦点时如何避免自动回发文本框

  21. 21

    如何从按钮上移开焦点,以便按空格键或Enter不会触发按钮?

  22. 22

    Python进程线程启动和停止计时器

  23. 23

    线程计时器,中断睡眠(停止睡眠)

  24. 24

    当窗口失去焦点时,Vb.NET禁用计时器

  25. 25

    在Python中停止计时器后,计时器无法重新启动

  26. 26

    在Python中停止计时器后,计时器无法重新启动

  27. 27

    在执行其他命令时运行计时器C ++

  28. 28

    计时器功能不会接受其他参数

  29. 29

    在执行其他命令时运行计时器

热门标签

归档