如何通过pyqt5按钮启动多个功能实例?

2024-09-28 22:49:23 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,我写了一个小机器人。 GUI是用PYQT5制作的。你知道吗

我有一个按钮,用几个参数调用一个函数。 我遇到的问题是

  1. 主窗口冻结
  2. 有问题nr1我不能点击按钮多次触发功能多次。(我想启动它多次)

我真的需要一些帮助。你知道吗

我的按钮:

        self.buttonSoleBox = QPushButton('Start Bot', self)
        self.buttonBox.move(20, 120)
        self.buttonBox.clicked.connect(self.on_click)

和我的按钮动作功能:

    def on_click(self):

        email = self.textbox.text()
        password = self.textbox1.text()
        aid = self.textbox2.text()
        payment = self.textbox4.text()
        paypalemail = self.textbox5.text()
        paypalpassword = self.textbox6.text()
        StartBotFunction(email, password, aid, payment, paypalemail, paypalpassword)

        self.textbox.setText("")
        self.textbox1.setText("")
        self.textbox2.setText("")
        self.textbox4.setText("")
        self.textbox5.setText("")
        self.textbox6.setText("")

用于测试: 2文件:

你知道吗主.py你知道吗

from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QLineEdit, QLabel, QComboBox
from PyQt5 import QtGui
from selenium import webdriver
import sys

class App(QMainWindow):

    def __init__(self):
        super(App,self).__init__()
        self.title = 'whatever'
        self.left = 200
        self.top = 200
        self.width = 800
        self.height = 500
        self.setWindowIcon(QtGui.QIcon('icon.png'))
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.initUI()

    def initUI(self):

        self.button1 = QPushButton('Start Bot', self)
        self.button1.move(20, 120)
        self.button1.clicked.connect(self.on_click)

        self.show()


    def on_click(self):
        word = "sneaker"
        StartBotFunction(word)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())



你知道吗搜索.py你知道吗

from selenium import webdriver
import time

def StartBotFunction(word):
    word
    driver = webdriver.Chrome()
    driver.get('https://www.zalando.de/herren/?q=' + word )

    first = driver.find_element_by_xpath('//*[@id="z-nvg-cognac-root"]/div[1]/z-grid/z-grid-item[2]/div/div[5]/z-grid/z-grid-item[1]/div/a')
    first.click()


    while (driver.page_source).__contains__('Bewertung'):
        time.sleep(5)
        driver.refresh()

在为你建立这个例子的时候,我发现当我这样做的时候,我遇到了我的主要问题 如果我删除while的东西,我可以创建尽可能多的chromewindows我点击按钮

你知道怎么解决吗?你知道吗

while (driver.page_source).__contains__('Bewertung'):
time.sleep(5)
driver.refresh()```

Tags: textfromimportselfdivondefdriver
1条回答
网友
1楼 · 发布于 2024-09-28 22:49:23

必须在另一个线程中运行StartBotFunction:

import sys
import threading

from PyQt5 import QtCore, QtWidgets

import search


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.lineedit = QtWidgets.QLineEdit("sneaker", placeholderText="word")
        button = QtWidgets.QPushButton("Press me")
        button.clicked.connect(self.on_click)

        flay = QtWidgets.QFormLayout(self)
        flay.addRow("Insert word:", self.lineedit)
        flay.addRow(button)

    @QtCore.pyqtSlot()
    def on_click(self):
        word = self.lineedit.text()
        threading.Thread(target=search.StartBotFunction, args=(word,)).start()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

相关问题 更多 >