Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法将从lineEdit获得的值传递给线程_Python_Pyside2_Qlineedit - Fatal编程技术网

Python 无法将从lineEdit获得的值传递给线程

Python 无法将从lineEdit获得的值传递给线程,python,pyside2,qlineedit,Python,Pyside2,Qlineedit,我尝试将从lineEdit获得的值传递给线程DBLP_线程,但该线程无法接收该值。但是,如果我手动定义一个可以传递给线程的字符串,会发生什么?如何将从lineEdit获得的值传递给线程?下面是我的代码 from PySide2.QtWidgets import QApplication, QMessageBox, QMainWindow from PySide2.QtUiTools import QUiLoader from PySide2 import QtWidgets from PySid

我尝试将从lineEdit获得的值传递给线程DBLP_线程,但该线程无法接收该值。但是,如果我手动定义一个可以传递给线程的字符串,会发生什么?如何将从lineEdit获得的值传递给线程?下面是我的代码

from PySide2.QtWidgets import QApplication, QMessageBox, QMainWindow
from PySide2.QtUiTools import QUiLoader
from PySide2 import QtWidgets
from PySide2.QtCore import QThread, Signal, QThreadPool

import sys
import re
import threading
import requests
import time

class My_Window():
  def __init__(self):
    self.ui = QUiLoader().load('demo.ui')
    self.ui.pushButton.clicked.connect(self.box)

  def DBLP_thread_callback(self, title, web):
    # self.ui.pushButton.setText(i)
    for i in range(len(title)):
        print(title[i])
        print(web[i])
    self.ui.pushButton.setChecked(False)
    self.ui.pushButton.setDisabled(False)

  def box(self):
    self.keys = self.ui.lineEdit.text() #get value from lineEdit
    print(self.keys)
    self.ui.pushButton.setChecked(True)
    self.ui.pushButton.setDisabled(True)
    self.th = DBLP_thread(ip='192.168.1.1', port=40)  #start my thread
    self.th.signal.connect(self.DBLP_thread_callback)
    self.th.start()

class DBLP_thread(QThread):
  signal = Signal(list, list)

  def __init__(self, ip, port, parent=None):
    super(DBLP_thread, self).__init__(parent)
    self.ip = ip
    self.port = port

  def run(self):
    '''
    重写
    '''
    time.sleep(1)
    self.win = My_Window()
    self.win.box()
    print(self.win.keys)  #Get the keys in the box(), but I did not get the value
    page = requests.get('https://dblp.uni-trier.de/search?q=' + self.win.keys)
    self.paper_title = re.findall('<span class="title" itemprop="name">(.*?)</span>', page.text, 
         re.S)
    self.paper_web = re.findall('<nav class="publ".*?li class="drop-down".*?div class="head".*?href=" 
          (.*?)">',page.text,re.S)
    self.signal.emit(self.paper_title, self.paper_web)
    return
从PySide2.qtwidts导入QApplication、QMessageBox、QMainWindow
从PySide2.QtUiTools导入QUiLoader
从PySide2导入QtWidgets
从PySide2.QtCore导入QThread、Signal、QThreadPool
导入系统
进口稀土
导入线程
导入请求
导入时间
将My_Window()分类:
定义初始化(自):
self.ui=QUiLoader().load('demo.ui')
self.ui.button.clicked.connect(self.box)
def DBLP_线程_回调(自身、标题、web):
#self.ui.butdown.setText(i)
对于范围内的i(len(title)):
印刷品(标题[i])
打印(网络[i])
self.ui.butdown.setChecked(False)
self.ui.butdown.setDisabled(False)
def箱(自身):
self.keys=self.ui.lineEdit.text()#从lineEdit获取值
打印(self.keys)
self.ui.butdown.setChecked(真)
self.ui.butdown.setDisabled(真)
self.th=DBLP_线程(ip='192.168.1.1',port=40)#启动我的线程
self.th.signal.connect(self.DBLP\u线程\u回调)
self.th.start()
DBLP_类线程(QThread):
信号=信号(列表,列表)
def u uu init u uuu(self、ip、port、parent=None):
超级(DBLP_线程,self)。_初始化(父级)
self.ip=ip
self.port=端口
def运行(自):
'''
重写
'''
时间。睡眠(1)
self.win=我的窗口()
self.win.box()
打印(self.win.keys)#获取框中的键(),但我没有获取值
page=requests.get('https://dblp.uni-trier.de/search?q=“+self.win.keys)
self.paper_title=re.findall(“(.*?”),page.text,
关于(S)
self.paper\u web=re.findall(“”,page.text,re.S)
self.signal.emit(self.paper\u title,self.paper\u web)
返回

在线程内构造MyWindow的新实例时出现了一个问题,其中包含一个空的QLineEdit。这就是为什么您无法获得所需的文本值,但更重要的是,MyWindow的新实例通过调用
box()
,启动了一个新的DBLP线程,从而创建了另一个新的MyWindow,以此类推……而不是尝试从线程内的MyWindow访问属性,要么将它们传递到线程的构造函数中,要么设置它的属性,例如
self.th.keys=self.ui.lineEdit.text()
谢谢兄弟,我会试试。