【发布时间】:2021-10-01 10:11:55
【问题描述】:
我的代码是这样的
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setGeometry(400, 400, 600, 480)
self.setWindowTitle("HBCheat")
self.initUI()
def initUI(self):
self.label = QtWidgets.QLabel(self)
self.label.setText("Reaction Cheat")
self.label.move(10, 0)
self.b1 = QtWidgets.QPushButton(self)
self.b1.setText("Toggle: off")
self.b1.move(10, 35)
self.b1.clicked.connect(self.reaction_cheat)
def click(self,x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
time.sleep(0.01)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
def reaction_cheat(self):
self.b1.setText("Toggle: on")
while not keyboard.is_pressed('q'):
try:
if pyautogui.pixel(1298, 415)[1] == 219:
self.click(1298, 415)
except:
continue
self.b1.setText("Toggle: off")
当我点击按钮“b1”时,它应该运行函数reaction_cheat。它确实如此。但问题是按钮的文本没有改变并且窗口崩溃。如果我按下按钮,它仍然可以按预期工作,但按钮文本不会改变。如果我要注释掉“while not keyboard.is_pressed('q'):”循环。它会改变按钮的文本并且函数会结束。
那么为什么 b1 的文本没有改变,窗口崩溃了。
此外,当我按 q 时,它不会阻止窗口崩溃。但它仍然会停止循环并停止函数运行。
【问题讨论】:
-
按钮文本没有改变,因为它正在获取窗口的更新被 while 循环阻止,在 "self.b1.setText("Toggle: on")" 行之后添加 QApplication.processEvents (),这应该可以解决按钮文本不更新的问题。如果需要,可能值得创建一个单独的 QThread 或进程来处理 mouse_event 以避免阻塞 GUI。
标签: python python-3.x user-interface pyqt5