PyQt получить значение из графического интерфейса - PullRequest
0 голосов
/ 07 июня 2018

Я создал пользовательский интерфейс, используя QtDesigner, а затем преобразовал .ui в .py.Пользовательский интерфейс имеет различные значения comboBox и textBox, из которых я хочу прочитать значения после нажатия кнопки «Выполнить».Запустите функцию, а затем заполните другие текстовые поля пользовательского интерфейса после завершения расчетов.Однако, когда я изменяю значение comboBox и нажимаю кнопку, скрипт все равно считывает начальное значение.

Я сделал простой графический интерфейс с комбинированным списком с двумя элементами и текстовым полем.Я пытаюсь прочитать текст comboBox и на основе выбранного элемента установить текст textBox.

Вот код, который я использую для запуска 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))

Есть мысли?

Спасибо

1 Ответ

0 голосов
/ 07 июня 2018

Если код, который вы реализуете во время выполнения, является тем, который, я думаю, вы злоупотребляете потоками, так как с сигналом 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 в момент нажатия кнопки, то оно устанавливает это значение как свойство потока, в вашем случае вы создаете новый графический интерфейс в другом потоке вместо использования существующего графического интерфейса:

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()
...