2015-12-20 240 views
1

我在Python中使用Selenium。我越来越寡妇Python中,消息单击按钮时:PyQt“没有响应”

寡妇无响应的Python Not responding in widows Python 我有以下脚本:

####文件:曲
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() 
###文件: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_()) 
文件: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 

“Not responding” in Python.

回答

1

其实,你主界面完全不冻结,但只为一次log被执行,并将控制返回到主界面,因为你是不是在你的应用程序中实现任何类型的线程机制。

所以,作为一个解决方案,你需要线程log方法不会阻止你的主界面,使用threading模块,下面是一个通用的方法,你需要阅读更多有关threading

1 - import threadingqu.py文件

2 - 在qu.py定义这个方法还有:

def launch_Selenium_Thread(self): 
     t = threading.Thread(target=self.log) 
     t.start() 

3 - 改变的pushButtonconnect方法:

QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL(_fromUtf8("clicked()")), self.launch_Selenium_Thread) 

4 -Add在qf.pylog3方法,txt参数:

def log3(self, txt):   
     text =unicode(txt) 
     print text 

5 - 在qu.pylog2方法最后固定:

def log2(self): 
      from qf import functon 
      n=functon() 
      txt = self.lineEdit.text() 
      n.log3(txt) 
+0

太棒了,非常感谢。东西方,“铁拳”是最棒的。 –

+0

@AhmadAli ...很高兴成为帮助.. :) –