PyQt“无响应”

Ahm*_*Ali 2 python selenium pyqt

我在 Python 中使用 Selenium。单击按钮时,我在寡妇 Python 中收到一条消息:

在寡妇 Python 中没有响应 在寡妇 Python 中没有响应 我有以下脚本:

####文件:qu
from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s
#####
try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(800, 600)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(340, 110, 75, 23))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(324, 200, 111, 23))
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        self.lineEdit = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(390, 240, 151, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

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

        QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL(_fromUtf8("clicked()")), self.log)
        QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), self.log2)


    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.pushButton.setText(_translate("MainWindow", "PushButton", None))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton_2", None))
    def log(self):############################
            from qf import functon 
            n=functon()
            n.log1()
    def log2(self):
            from qf import functon 
            n=functon()
            n.log3() 
Run Code Online (Sandbox Code Playgroud) ###文件:qm
# -*- coding: utf-8 -*-

from PyQt4 import QtGui
from PyQt4.QtGui import QApplication
from PyQt4 import QtCore, QtGui
import sys
from qu import Ui_MainWindow


class MainWindow(QtGui.QMainWindow,Ui_MainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    myapp = MainWindow()
    myapp.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud) 文件:qf
from   selenium import webdriver
from PyQt4 import QtCore, QtGui
import sys
from qu import Ui_MainWindow


class functon ():
    def __init__(self, parent=None):

        self.parent=parent


    def log1(self):
            browser =webdriver.Firefox()
            browser.get( "http://google.com" )

    def log3(self):        
            text =unicode(self.lineEdit.text())
            print text
Run Code Online (Sandbox Code Playgroud)

Python 中的“无响应”。

Iro*_*ist 5

实际上,您的主 GUI 根本没有被冻结,而只是log在执行时将控制权返回给主 GUI,因为您没有在应用程序中实现任何类型的线程机制。

因此,作为解决方案,您需要线程 log方法不阻塞您的主 GUI,使用threading模块,以下是通用方法,您需要阅读更多关于threading

1 -import threading在您的qu.py文件中

2 - 也定义此方法qu.py

def launch_Selenium_Thread(self):
        t = threading.Thread(target=self.log)
        t.start()
Run Code Online (Sandbox Code Playgroud)

3 - 将connect方法更改pushButton为:

QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL(_fromUtf8("clicked()")), self.launch_Selenium_Thread)
Run Code Online (Sandbox Code Playgroud)

4 - 添加qf.py log3方法,txt参数:

def log3(self, txt):        
        text =unicode(txt)
        print text
Run Code Online (Sandbox Code Playgroud)

5 - 最后修复qu.py log2方法:

def log2(self):
            from qf import functon 
            n=functon()
            txt = self.lineEdit.text()
            n.log3(txt) 
Run Code Online (Sandbox Code Playgroud)