PyQt 从 GUI 获取值
PyQt get value from GUI
我使用 QtDesigner
构建了一个用户界面,然后将 .ui
转换为 .py
。用户界面有不同的 comboBox
和 textBox
,我想在单击 运行 按钮后从中读取值。 运行 一个函数,然后在计算完成后填充用户界面的其他文本框。但是,当我更改 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()
我使用 QtDesigner
构建了一个用户界面,然后将 .ui
转换为 .py
。用户界面有不同的 comboBox
和 textBox
,我想在单击 运行 按钮后从中读取值。 运行 一个函数,然后在计算完成后填充用户界面的其他文本框。但是,当我更改 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()