Pyqt5 当选择widget.setFocus(True)时,QBasicTimer可用于以QThread启动的线程
我总是收到这个错误消息 当widget.setFocus()启动时,QBasicTimer可以与以QThread启动的线程一起使用 基本上,我有一个班是听GPIO的。 它将myForm.dial_on_value_changed()注册为对Rotary的回调,当旋转器旋转时,Rotary将调用dial_on_value_changed() 如果myForm.dial\u on\u value\u changed()只打印文本或字符串,则可以。但是,如果它选择myForm元素中的一个并更改其状态,例如setFocus(True),它将抛出上面的错误,smth与QThread相关 我的应用程序是一个单线程,Rotari本身的工作原理是监听GPIO引脚中的中断,该引脚将调用注册的回调函数 有人能告诉我或指导我做错了什么吗?或者,解决这个问题的更好方法是“旋转旋钮,将所有GUI元素设置为焦点” 提前谢谢 这是我的代码片段Pyqt5 当选择widget.setFocus(True)时,QBasicTimer可用于以QThread启动的线程,pyqt5,qt5,Pyqt5,Qt5,我总是收到这个错误消息 当widget.setFocus()启动时,QBasicTimer可以与以QThread启动的线程一起使用 基本上,我有一个班是听GPIO的。 它将myForm.dial_on_value_changed()注册为对Rotary的回调,当旋转器旋转时,Rotary将调用dial_on_value_changed() 如果myForm.dial\u on\u value\u changed()只打印文本或字符串,则可以。但是,如果它选择myForm元素中的一个并更改其状态,
class MyForm(QDialog):
### creating a circular list
self._vt_dial_cycle = cycle([
# tuple UI element with a function
(self.vt_textedit, self.dial_to_vt),
(self.rr_textedit, self.dial_to_rr),
(self.stop_button, None),
(self.start_button, None),
(self.ie_textedit, self.dial_to_ie)
])
def dial_to_vt(self):
print("Dial on vt")
def dial_to_rr(self):
print("Dial on rr")
def dial_to_ie(self):
print("Dial on ie")
def dial_on_value_changed(self, direction):
# get next element from circular list.
(active_widget, action) = next(self._vt_dial_cycle)
self._current_widget = (active_widget, action)
#execute action manually registered with widget
action()
if isinstance(active_widget, QTextEdit):
self.move_cursor_to_end(active_widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MyForm()
w.show()
# ... a rotari with a knop
ky040 = KY040(CLOCKPIN, DATAPIN, SWITCHPIN, w.dial_on_value_changed, w.dial_on_pressed)
ky040.start()
您说您只使用了一个线程,但是从错误(顺便说一句,您没有正确报告:请在复制/粘贴错误消息时更加小心)和您的描述来看,
KY040
看起来很像有自己线程的东西,如果是这样,那么您已经有了答案:您无法从外部线程访问UI元素。假设我无法从外部线程访问UI元素,那么我如何处理来自GPIO的任何输入?我应该在特定的pin上进行某种共享吗?KY040是一个包装器,包装GPIO库,如果其中一个io引脚改变其状态,该库将注册回调。您能给我一个建议吗?使用带有自定义信号的QThread,并将信号emit
用作触发GPIO时调用的函数参数,然后在QThread的run()
中启动它。然后将线程的信号与实际与小部件交互的函数连接起来。对诸如QThread、worker和customsignals之类的术语做一些研究,因为关于这些主题的帖子有上百篇。非常感谢。我读过这本书Qt5 Python GUI编程。这有助于我理解。