PyQt 从 GUI 获取值

PyQt get value from GUI

我使用 QtDesigner 构建了一个用户界面,然后将 .ui 转换为 .py。用户界面有不同的 comboBoxtextBox,我想在单击 运行 按钮后从中读取值。 运行 一个函数,然后在计算完成后填充用户界面的其他文本框。但是,当我更改 comboBox 的值并单击按钮时,脚本仍会读取初始值。

我用一个带有两个项目和一个文本框的组合框做了一个简单的 GUI。我正在尝试读取组合框文本并根据所选项目设置文本框的文本。

这是我用来 运行 GUI 并读取值的代码:

from PyQt4 import QtGui
from pyQt4 import QtCore
import sys
import GUI

class MyThread(QtCore.QThread):
    updated = QtCore.pyqtSignal(str)
    def run(self):
        self.gui = Window()
        name = self.gui.gui_Name.currentText()
        print (name)

        if name == 'Cristina':
            country = 'Italy'
        else:
            country = 'Other'

        self.updated.emit(str(1))


class Window(QtGui.QMainWindow, GUI.Home):
    def __init__(self,parent = None):
        super(Window,self).__init__(parent)
        self.setupUi(self)
        self._thread = MyThread(self)
        self._thread.updated.connect(self.updateText)
        self.update()
        self.
        self.pushButton.clicked.connect(self._thread.start)


    def updateText(self,text):
        self.Country.setText(str(country))

有什么想法吗?

谢谢

如果您在 运行 中实现的代码是我认为您在滥用线程的代码,因为使用 currentTextChanged 信号就足够了,如下所示:

class Window(QtGui.QMainWindow, GUI.Home):
    def __init__(self,parent = None):
        super(Window,self).__init__(parent)
        self.setupUi(self)
        self.gui_Name.currentTextChanged.connect(self.onCurrentTextChanged)

    def onCurrentTextChanged(self, text):
        if if name == 'Cristina':
            country = 'Italy'
        else:
            country = 'Other'
        self.Country.setText(str(country))

另一方面,如果实际代码是一项耗时的任务,那么使用线程就足够了。如果任务在按下按钮时将 QComboBox 的值作为参考,那么它将将该值确定为线程的 属性,在您的情况下,您正在另一个线程中创建一个新的 GUI使用现有 GUI:

class MyThread(QtCore.QThread):
    updated = QtCore.pyqtSignal(str)

    def run(self):
        name = self.currentText
        print(name)
        if name == 'Cristina':
            country = 'Italy'
        else:
            country = 'Other'
        self.updated.emit(country)

class Window(QtGui.QMainWindow, GUI.Home):
    def __init__(self,parent = None):
        super(Window,self).__init__(parent)
        self.setupUi(self)
        self._thread = MyThread(self)
        self._thread.updated.connect(self.Country.setText)
        self.pushButton.clicked.connect(self.start_thread)

    def start_thread(self):
        self._thread.currentText = self.gui_Name.currentText()
        self._thread.start()