пользователь вводит данные в QLineEdit нажимает QpushButton нужно передать в поток QThread и в дальнейшем c этих данных в методе run сделать задержку

Программа для нажатия кнопки с задержкой которую ты хочешь не могу передать данные из QlineEdit там пользователь и пишет задержку. Новичек в pyqt5 раньше с таким не работал

from ui import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
import pyautogui
import time


class WorkThread(QtCore.QThread, QtWidgets.QMainWindow):
    threadSignal = QtCore.pyqtSignal(int)

    def __init__(self):
        super(WorkThread, self).__init__()

    def run(self):
        while True:
            time.sleep(3) # зажержка из потока должна быть тут вместо 3
            pyautogui.press('e')


class Button_WoW(QtWidgets.QMainWindow):

    def __init__(self):
        super(Button_WoW, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.thread = WorkThread()
        self.ui.start_button.clicked.connect(self.func1)

        self.times = self.ui.main_line_edit.text()  # 1123
        self.ui.stop_button.setDisabled(True)
        self.ui.stop_button.clicked.connect(self.func2)

    def func1(self):
        self.ui.start_button.setDisabled(True)
        self.ui.stop_button.setDisabled(False)
        self.thread.start()

    def func2(self):
        self.thread.terminate()
        self.ui.stop_button.setDisabled(True)
        self.ui.start_button.setDisabled(False)

    def on_fineshed(self):
        self.ui.start_button.setDisabled(False)
        self.ui.stop_button.setDisabled(True)

    def count_sleep(self):
        int(self.ui.main_line_edit.text())


def main():
    app = QtWidgets.QApplication([])
    application = Button_WoW()
    application.show()
    sys.exit(app.exec())


if __name__ == '__main__':
    main()

.ui - файл

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
   def setupUi(self, MainWindow):
       MainWindow.setObjectName("ButtonMacro")
       MainWindow.resize(403, 436)
       MainWindow.setStyleSheet("background-color: #121212;")
       MainWindow.setFixedSize(403, 436)
       self.centralwidget = QtWidgets.QWidget(MainWindow)
       self.centralwidget.setObjectName("centralwidget")
       self.start_button = QtWidgets.QPushButton(self.centralwidget)
       self.start_button.setGeometry(QtCore.QRect(70, 330, 271, 51))
       font = QtGui.QFont()
       font.setBold(True)
       font.setItalic(False)
       font.setWeight(75)
       self.start_button.setFont(font)
       self.start_button.setStyleSheet("background-color: #00ff3b;\n"
                                       "border-radius: 12px;\n"
                                       "\n"
                                       "start_button:!hover{\n"
                                       "    background: #50ff240;\n"
                                       "    border-color: #050505;\n"
                                       "}")
       self.start_button.setObjectName("start_button")
       self.frame = QtWidgets.QFrame(self.centralwidget)
       self.frame.setGeometry(QtCore.QRect(-1, -11, 411, 90))
       self.frame.setStyleSheet("background-color: #333;")
       self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
       self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
       self.frame.setObjectName("frame")
       self.main_label = QtWidgets.QLabel(self.frame)
       self.main_label.setGeometry(QtCore.QRect(40, 20, 331, 61))
       font = QtGui.QFont()
       font.setPointSize(-1)
       self.main_label.setFont(font)
       self.main_label.setStyleSheet("color: #121212;\n"
                                     "font-size: 45px;")
       self.main_label.setObjectName("main_label")
       self.b1za_label = QtWidgets.QLabel(self.frame)
       self.b1za_label.setGeometry(QtCore.QRect(10, 10, 81, 21))
       font = QtGui.QFont()
       font.setPointSize(10)
       font.setBold(True)
       font.setWeight(75)
       self.b1za_label.setFont(font)
       self.b1za_label.setStyleSheet("color: #121212;")
       self.b1za_label.setObjectName("b1za_label")
       self.stop_button = QtWidgets.QPushButton(self.centralwidget)
       self.stop_button.setGeometry(QtCore.QRect(70, 260, 271, 51))
       font = QtGui.QFont()
       font.setBold(True)
       font.setItalic(False)
       font.setWeight(75)
       self.stop_button.setFont(font)
       self.stop_button.setStyleSheet("background-color: #e01e3e;\n"
                                      "border-radius: 12px;\n"
                                      "\n"
                                      "stop_button:!hover{\n"
                                      "    background: #ff3030;\n"
                                      "    border-color: #050505;\n"
                                      "}")
       self.stop_button.setObjectName("stop_button")
       self.main_line_edit = QtWidgets.QLineEdit(self.centralwidget)
       self.main_line_edit.setGeometry(QtCore.QRect(70, 220, 271, 31))
       self.main_line_edit.setStyleSheet("border: 2px solid #ffffff;\n"
                                         "background-color: #121212;\n"
                                         "border-radius: 12;\n"
                                         "color: #ffffff;")
       self.main_line_edit.setObjectName("main_line_edit")
       self.label_3 = QtWidgets.QLabel(self.centralwidget)
       self.label_3.setGeometry(QtCore.QRect(140, 90, 131, 121))
       self.label_3.setText("")
       self.label_3.setPixmap(QtGui.QPixmap("../239775.png"))
       self.label_3.setObjectName("label_3")
       MainWindow.setCentralWidget(self.centralwidget)

       self.retranslateUi(MainWindow)
       QtCore.QMetaObject.connectSlotsByName(MainWindow)

   def retranslateUi(self, MainWindow):
       _translate = QtCore.QCoreApplication.translate
       MainWindow.setWindowTitle(_translate("ButtonMacro", "ButtonMacro"))
       self.start_button.setText(_translate("ButtonMacro", "START"))
       self.main_label.setText(_translate("ButtonMacro", "<html><head/><body><p>Macro for WoW</p></body></html>"))
       self.b1za_label.setText(_translate("ButtonMacro", "by.OneB1za"))
       self.stop_button.setText(_translate("ButtonMacro", "STOP"))



if __name__ == "__main__":
   import sys

   app = QtWidgets.QApplication(sys.argv)
   MainWindow = QtWidgets.QMainWindow()
   ui = Ui_MainWindow()
   ui.setupUi(MainWindow)
   MainWindow.show()
   sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

Я немного изменил ваш main.py, проверьте и спросите если вам что-то не понятно.

import sys
#import time
from PyQt5 import QtCore, QtGui, QtWidgets
import pyautogui

#from ui import Ui_MainWindow
class Ui_MainWindow(object):
   def setupUi(self, MainWindow):
       MainWindow.setObjectName("ButtonMacro")
       MainWindow.resize(403, 436)
       MainWindow.setStyleSheet("background-color: #121212;")
       MainWindow.setFixedSize(403, 436)
       self.centralwidget = QtWidgets.QWidget(MainWindow)
       self.centralwidget.setObjectName("centralwidget")
       self.start_button = QtWidgets.QPushButton(self.centralwidget)
       self.start_button.setGeometry(QtCore.QRect(70, 330, 271, 51))
       font = QtGui.QFont()
       font.setBold(True)
       font.setItalic(False)
       font.setWeight(75)
       self.start_button.setFont(font)
       self.start_button.setStyleSheet("background-color: #00ff3b;\n"
                                       "border-radius: 12px;\n"
                                       "\n"
                                       "start_button:!hover{\n"
                                       "    background: #50ff240;\n"
                                       "    border-color: #050505;\n"
                                       "}")
       self.start_button.setObjectName("start_button")
       self.frame = QtWidgets.QFrame(self.centralwidget)
       self.frame.setGeometry(QtCore.QRect(-1, -11, 411, 90))
       self.frame.setStyleSheet("background-color: #333;")
       self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
       self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
       self.frame.setObjectName("frame")
       self.main_label = QtWidgets.QLabel(self.frame)
       self.main_label.setGeometry(QtCore.QRect(40, 20, 331, 61))
       font = QtGui.QFont()
       font.setPointSize(-1)
       self.main_label.setFont(font)
       self.main_label.setStyleSheet("color: #121212;\n"
                                     "font-size: 45px;")
       self.main_label.setObjectName("main_label")
       self.b1za_label = QtWidgets.QLabel(self.frame)
       self.b1za_label.setGeometry(QtCore.QRect(10, 10, 81, 21))
       font = QtGui.QFont()
       font.setPointSize(10)
       font.setBold(True)
       font.setWeight(75)
       self.b1za_label.setFont(font)
       self.b1za_label.setStyleSheet("color: #121212;")
       self.b1za_label.setObjectName("b1za_label")
       self.stop_button = QtWidgets.QPushButton(self.centralwidget)
       self.stop_button.setGeometry(QtCore.QRect(70, 260, 271, 51))
       font = QtGui.QFont()
       font.setBold(True)
       font.setItalic(False)
       font.setWeight(75)
       self.stop_button.setFont(font)
       self.stop_button.setStyleSheet("background-color: #e01e3e;\n"
                                      "border-radius: 12px;\n"
                                      "\n"
                                      "stop_button:!hover{\n"
                                      "    background: #ff3030;\n"
                                      "    border-color: #050505;\n"
                                      "}")
       self.stop_button.setObjectName("stop_button")
       self.main_line_edit = QtWidgets.QLineEdit(self.centralwidget)
       self.main_line_edit.setGeometry(QtCore.QRect(70, 220, 271, 31))
       self.main_line_edit.setStyleSheet("border: 2px solid #ffffff;\n"
                                         "background-color: #121212;\n"
                                         "border-radius: 12;\n"
                                         "color: #ffffff;")
       self.main_line_edit.setObjectName("main_line_edit")
       self.label_3 = QtWidgets.QLabel(self.centralwidget)
       self.label_3.setGeometry(QtCore.QRect(140, 90, 131, 121))
       self.label_3.setText("")
       self.label_3.setPixmap(QtGui.QPixmap("Ok.png").scaled(131, 121))
       self.label_3.setObjectName("label_3")
       MainWindow.setCentralWidget(self.centralwidget)

       self.retranslateUi(MainWindow)
       QtCore.QMetaObject.connectSlotsByName(MainWindow)

   def retranslateUi(self, MainWindow):
       _translate = QtCore.QCoreApplication.translate
       MainWindow.setWindowTitle(_translate("ButtonMacro", "ButtonMacro"))
       self.start_button.setText(_translate("ButtonMacro", "START"))
       self.main_label.setText(_translate("ButtonMacro", "<html><head/><body><p>Macro for WoW</p></body></html>"))
       self.b1za_label.setText(_translate("ButtonMacro", "by.OneB1za"))
       self.stop_button.setText(_translate("ButtonMacro", "STOP"))
       

class WorkThread(QtCore.QThread):           #  , QtWidgets.QMainWindow):
    threadSignal = QtCore.pyqtSignal(int)

    def __init__(self):
        super(WorkThread, self).__init__()
        self.my_sleep = 3000                                 # +++ 3000 мс = 3 сек 

    def run(self):
        while True:
#            time.sleep(3)               # зажержка из потока должна быть тут вместо 3
            self.msleep(self.my_sleep)                       # +++ 
            pyautogui.press('e')
            self.threadSignal.emit(self.my_sleep)            # +++
            

class Button_WoW(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(Button_WoW, self).__init__()
#        self.ui = Ui_MainWindow()
        self.setupUi(self)

        self.start_button.clicked.connect(self.func_start)
        
        self.times = self.main_line_edit.text()       # 1123
        self.stop_button.setDisabled(True)
        self.stop_button.clicked.connect(self.func_stop)
        
        self.label_3.setStyleSheet("""
            border-radius: 12;
            color: #F00;
            font-size: 17px;
            border-image: url(rio.jpg) 0 0 0 0  ; 
        """)
        self.label_3.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom)
        
        self.main_line_edit.textChanged.connect(self.text_changed)
        
        self.thread = WorkThread()
        self.thread.threadSignal.connect(self.thread_signal)

    def text_changed(self, text):
        if text.isdigit():
            self.thread.my_sleep = int(text)
        
    def thread_signal(self, my_sleep):
        self.label_3.setText(f'Пауза: {my_sleep} мс')

    def func_start(self):
        self.start_button.setDisabled(True)
        self.stop_button.setDisabled(False)
        self.thread.start()

    def func_stop(self):
        self.label_3.setText(f'Процесс \nостановлен.')
        
        self.thread.terminate()
        self.stop_button.setDisabled(True)
        self.start_button.setDisabled(False)

''' # ??? vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    def on_fineshed(self):
        self.start_button.setDisabled(False)
        self.stop_button.setDisabled(True)

    def count_sleep(self):
        int(self.main_line_edit.text())
''' # ??? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

def main():
    app = QtWidgets.QApplication(sys.argv)
    application = Button_WoW()
    application.show()
    sys.exit(app.exec())


if __name__ == '__main__':
    main()

введите сюда описание изображения


rio.jpg

введите сюда описание изображения

Ok.png

введите сюда описание изображения

→ Ссылка