Python 如何在PyQt5中从一个类访问另一个类的Qobject
我正在将Python 如何在PyQt5中从一个类访问另一个类的Qobject,python,json,pyqt5,Python,Json,Pyqt5,我正在将interface.ui导入我的应用程序,它有一个QcomboBox对象。我使用QThread类来运行循环。我想知道如何从另一个类(QThread)访问我的组合框 类Ui(QtWidgets.QMainWindow): 定义初始化(自): 超级(用户界面,自我)。\uuuu初始化 uic.loadUi('interface.ui',self) self.show() #我想访问self.comboBox 类WorkerThread(QThread): def运行(自): #另一个类,我想
interface.ui
导入我的应用程序,它有一个QcomboBox
对象。我使用QThread
类来运行循环。我想知道如何从另一个类(QThread
)访问我的组合框
类Ui(QtWidgets.QMainWindow):
定义初始化(自):
超级(用户界面,自我)。\uuuu初始化
uic.loadUi('interface.ui',self)
self.show()
#我想访问self.comboBox
类WorkerThread(QThread):
def运行(自):
#另一个类,我想在这里访问它
我想从UI类访问self.comboBox
到WorkerThread
类。如何从一个类访问到另一个类
以下是我努力实现的目标:
我的应用程序中有几个QTextEdit
对象。当用户在此文本编辑框中输入一些信息时,单击按钮会将其转储到名为data.json
的json文件中。但是,如果用户选择了不同的组合框选项,我希望程序打开不同的json文件并将其转储到该json文件中。我让它工作了
由于我已将数据存储在默认组合框选项的data.json
文件中,因此我打开data.json
以运行线程。(我的线程使用json文件中的信息)
如果用户选择了不同的comboBox选项,我希望程序使用所选comboBox选项的currentText名称打开特定的json文件,从中获取信息并运行我的线程
class WorkerThread(QThread):
def运行(自):
#如果组合框的currentText==“默认值”:
将open('data.json')作为f:
data=json.load(f)
#其他:
将open(f'{currentText of comboBox}.json')作为f:
data=json.load(f)
根据所选comboBox选项的文本打开正确的json文件后,启动循环
class WorkerThread(QThread):
def运行(自):
#如果组合框的currentText==“默认值”:
将open('data.json')作为f:
data=json.load(f)
#其他:
将open(f'{currentText of comboBox}.json')作为f:
data=json.load(f)
尽管如此:
打印(数据['my_data_of_the_opened_json']))
外部线程应始终与主UI线程分开工作。事实上,理论上它应该对UI一无所知
如果用户选择了不同的comboBox选项,我希望程序使用所选comboBox选项的currentText名称打开特定的json文件,从中获取信息并运行我的线程
您的解释已经给出了答案:线程在选择组合选项后运行。这意味着它应该仅在该点创建(或启动),而不是在该点之前
以这个伪代码为例:
class Worker(QThread):
def __init__(self, options):
super().__init__()
self.options = options
def run(self):
# do something with given options
class MainWindow(QMainWindow):
def __init__(self):
# ...
self.comboBox.activated.connect(self.startThread)
def startThread(self, index):
options = self.readFromJson(...)
self.worker = Worker(options)
self.worker.start()
在某些情况下,线程应该是持久的,因此它被创建并很早启动,然后它将等待直到实际需要一些处理;在这些情况下,您可以使用队列并等待一些数据
from queue import Queue
class Worker(QThread):
def __init__(self):
super().__init__()
self.queue = Queue()
def run(self):
while True:
options = self.queue.get()
# do something with options
def queueOptions(self, options):
self.queue.put(options)
class MainWindow(QMainWindow):
def __init__(self):
# ...
self.comboBox.activated.connect(self.processOption)
self.worker = Worker()
self.worker.start()
def processOption(self, index):
options = self.readFromJson(...)
self.worker.queueOptions(options)
请更加耐心,避免删除问题并再次转发,因为有足够声誉的用户仍然可以看到已删除的帖子。如果人们能够回顾你的问题,它最终会被打开。很抱歉,我不知道这一点。