PyQt 无法从 main window 中的对话框中为对象设置值
PyQt can't set a value for an object from a dialog in main window
我有一个主程序,它调用各种具有自己的 GUI 的对话框。基本上我想做的是在 Main 中为另一个对象设置一个值 class:
class ZoneManager(QMainWindow, mainWindow.Ui_zzzMainWindow):
def __init__(self):
QMainWindow.__init__(self)
mainWindow.Ui_zzzMainWindow.__init__(self)
.....
def cookie_find(self):
match = re.search('cookie_id=(.*?)\"', page).group(1)
rga = str(match)
print (match)
dialog = QDialog()
dialog.ui = rga_session.Ui_rga_sessionDialog()
dialog.ui.setupUi(dialog)
dialog.exec_()
dialog.ui.rgaSessionText.setText(rga) # <<<<I want to set the text into a QLineEdit object
but I can't.
The dialog is in a separate file and made it in QTDesigner with standard 2 methods:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_rga_sessionDialog(object):
def setupUi(self, rga_sessionDialog):
rga_sessionDialog.setObjectName("rga_sessionDialog")
self.rgaSessionText = QtWidgets.QLineEdit(rga_sessionDialog)
self.rgaSessionText.setGeometry(QtCore.QRect(110, 30, 261, 21))
self.rgaSessionText.setFocusPolicy(QtCore.Qt.ClickFocus)
self.rgaSessionText.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.rgaSessionText.setObjectName("rgaSessionText")
..........
def retranslateUi(self, rga_sessionDialog):
_translate = QtCore.QCoreApplication.translate
.....
谁可以将我从 Regex 中找到的文本附加到 "rgaSessionText" 中?我做错了什么?提前致谢
我觉得主窗口和其他对话框之间通过信号槽方式通信比较好
在您的 ZoneManager class 中,定义:
settextsignal= pyqtSignal(str)
在你的 Ui_rga_sessionDialog class 中,定义:
@pyqtSlot(str)
def textUpdate(self, rga):
self.rgaSessionText.setText(rga)
然后在您的 cookie_find 方法中,在初始化 Ui_rga_sessionDialog 之后,输入:
self.settextsignal.connect(dialog.ui.textUpdate)
然后每当你想设置文本时,只需调用:
self.settextsignal.emit(text)
我有一个主程序,它调用各种具有自己的 GUI 的对话框。基本上我想做的是在 Main 中为另一个对象设置一个值 class:
class ZoneManager(QMainWindow, mainWindow.Ui_zzzMainWindow):
def __init__(self):
QMainWindow.__init__(self)
mainWindow.Ui_zzzMainWindow.__init__(self)
.....
def cookie_find(self):
match = re.search('cookie_id=(.*?)\"', page).group(1)
rga = str(match)
print (match)
dialog = QDialog()
dialog.ui = rga_session.Ui_rga_sessionDialog()
dialog.ui.setupUi(dialog)
dialog.exec_()
dialog.ui.rgaSessionText.setText(rga) # <<<<I want to set the text into a QLineEdit object
but I can't. The dialog is in a separate file and made it in QTDesigner with standard 2 methods: from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_rga_sessionDialog(object):
def setupUi(self, rga_sessionDialog):
rga_sessionDialog.setObjectName("rga_sessionDialog")
self.rgaSessionText = QtWidgets.QLineEdit(rga_sessionDialog)
self.rgaSessionText.setGeometry(QtCore.QRect(110, 30, 261, 21))
self.rgaSessionText.setFocusPolicy(QtCore.Qt.ClickFocus)
self.rgaSessionText.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
self.rgaSessionText.setObjectName("rgaSessionText")
..........
def retranslateUi(self, rga_sessionDialog):
_translate = QtCore.QCoreApplication.translate
.....
谁可以将我从 Regex 中找到的文本附加到 "rgaSessionText" 中?我做错了什么?提前致谢
我觉得主窗口和其他对话框之间通过信号槽方式通信比较好
在您的 ZoneManager class 中,定义:
settextsignal= pyqtSignal(str)
在你的 Ui_rga_sessionDialog class 中,定义:
@pyqtSlot(str)
def textUpdate(self, rga):
self.rgaSessionText.setText(rga)
然后在您的 cookie_find 方法中,在初始化 Ui_rga_sessionDialog 之后,输入:
self.settextsignal.connect(dialog.ui.textUpdate)
然后每当你想设置文本时,只需调用:
self.settextsignal.emit(text)