Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 如何在PyQt5中从一个类访问另一个类的Qobject_Python_Json_Pyqt5 - Fatal编程技术网

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)

请更加耐心,避免删除问题并再次转发,因为有足够声誉的用户仍然可以看到已删除的帖子。如果人们能够回顾你的问题,它最终会被打开。很抱歉,我不知道这一点。