将 lineEdit 值设置为另一个 class 中的标签 (Pyqt4)
Set lineEdit value to a label in an another class (Pyqt4)
我是 Qt 新手,想将 entry/lineEdit 字段值设置为另一个框架中可用的标签,该标签在另一个 class:
中定义
from PyQt4 import QtCore, QtGui
import time
from PyQt4.QtCore import SIGNAL
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog1(object):
def setupUi(self, Dialog):
self.frame = QtGui.QFrame(Dialog)
self.frame.setGeometry(QtCore.QRect(40, 20, 311, 391))
self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame.setFrameShadow(QtGui.QFrame.Raised)
self.frame.setObjectName(_fromUtf8("frame"))
self.label = QtGui.QLabel(self.frame)
self.label.setGeometry(QtCore.QRect(120, 180, 72, 23))
self.label.setObjectName(_fromUtf8("label"))
self.label.setText(_translate("Dialog", "omniOS", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Ui_Dialog2(object):
def setupUi(self, Dialog):
self.frame_2 = QtGui.QFrame(Dialog)
self.frame_2.setGeometry(QtCore.QRect(30, 30, 311, 391))
self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
self.frame_2.setObjectName(_fromUtf8("frame_2"))
self.label_2 = QtGui.QLabel(self.frame_2)
self.label_2.setGeometry(QtCore.QRect(50, 230, 72, 31))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.lineEdit = QtGui.QLineEdit(self.frame_2)
self.lineEdit.setGeometry(QtCore.QRect(150, 230, 113, 33))
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.label_2.setText(_translate("Dialog", "Login", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.retranslateUi(Dialog)
self.pb = QtGui.QPushButton(self.frame_2)
self.pb.setObjectName(_fromUtf8("login"))
self.pb.setText("Login")
self.connect(self.pb, SIGNAL("clicked()"), self.button_click)
def button_click(self):
# shost is a QString object
text = self.lineEdit.text()
print (text)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Ui_Dialog3(object):
def setupUi(self, Dialog):
self.frame_3 = QtGui.QFrame(Dialog)
self.frame_3.setGeometry(QtCore.QRect(30, 30, 311, 391))
self.frame_3.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtGui.QFrame.Raised)
self.frame_3.setObjectName(_fromUtf8("frame_3"))
self.label_3 = QtGui.QLabel(self.frame_3)
self.label_3.setGeometry(QtCore.QRect(50, 230, 72, 31))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.label_4 = QtGui.QLabel(self.frame_3)
self.label_4.setGeometry(QtCore.QRect(150, 230, 113, 33))
self.label_4.setObjectName(_fromUtf8("label_4"))
self.label_3.setText(_translate("Dialog", "Email", None))
self.label_4.setText(_translate("Dialog", text, None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.retranslateUi(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Dialog1(QtGui.QDialog, Ui_Dialog1):
def __init__(self, parent=None):
super(Dialog1, self).__init__(parent)
self.setupUi(self)
class Dialog2(QtGui.QDialog, Ui_Dialog2):
def __init__(self, parent=None):
super(Dialog2, self).__init__(parent)
self.setupUi(self)
class Dialog3(QtGui.QDialog, Ui_Dialog3):
def __init__(self, parent=None):
super(Dialog3, self).__init__(parent)
self.setupUi(self)
if __name__=="__main__":
import sys
a = QtGui.QApplication(sys.argv)
w1 = Dialog1()
w2 = Dialog2()
w3 = Dialog3()
def on_timeout():
w1.hide()
w2.show()
def on_timeout1():
w2.hide()
w3.show()
w1.show()
QtCore.QTimer.singleShot(3000, on_timeout)
QtCore.QTimer.singleShot(6000, on_timeout1)
sys.exit(a.exec_())
我需要做的是将用户输入的lineEdit
(in class Dialog2
)值设置为label_4
(in class Dialog3
):
def button_click(self):
# shost is a QString object
text = self.lineEdit.text()
print (text)
问题:如何在用户输入电子邮件后更新Dialog3.label_4
?
更改"on_timeout1"函数
def on_timeout1():
w2.hide()
w3.show()
w3.label_4.setText(w2.lineEdit.text())
您的代码存在问题,您需要以某种方式 "communicate" 对话 2 和对话 3。对于这个简单的案例,我建议您执行以下操作:
- 修改
Dialog2
的构造函数以将对 Dialog3
. 的实例的引用作为输入
- 在
Dialog2.button_clicked
方法中更新 Dialog3
的实例并隐藏当前的 Dialog2
实例。
- 更改
"__main__"
部分的登录名:显示 w1
和 w2
但 将 w3
传递给 w2
在构造函数中(所以必须先创建w3),去掉第二个定时器。
下面是我上述内容的完整实现。但是让我最后指出 UI 元素之间的 "communication" 是一个更微妙和复杂的话题。因此,如果您打算进行认真的 UI 开发,我建议您开始阅读模型-视图-控制器模式,例如 here.
from PyQt4 import QtCore, QtGui
import time
from PyQt4.QtCore import SIGNAL
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog1(object):
def setupUi(self, Dialog):
self.frame = QtGui.QFrame(Dialog)
self.frame.setGeometry(QtCore.QRect(40, 20, 311, 391))
self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame.setFrameShadow(QtGui.QFrame.Raised)
self.frame.setObjectName(_fromUtf8("frame"))
self.label = QtGui.QLabel(self.frame)
self.label.setGeometry(QtCore.QRect(120, 180, 72, 23))
self.label.setObjectName(_fromUtf8("label"))
self.label.setText(_translate("Dialog", "omniOS", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Ui_Dialog2(object):
def setupUi(self, Dialog):
self.frame_2 = QtGui.QFrame(Dialog)
self.frame_2.setGeometry(QtCore.QRect(30, 30, 311, 391))
self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
self.frame_2.setObjectName(_fromUtf8("frame_2"))
self.label_2 = QtGui.QLabel(self.frame_2)
self.label_2.setGeometry(QtCore.QRect(50, 230, 72, 31))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.lineEdit = QtGui.QLineEdit(self.frame_2)
self.lineEdit.setGeometry(QtCore.QRect(150, 230, 113, 33))
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.label_2.setText(_translate("Dialog", "Login", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.retranslateUi(Dialog)
self.pb = QtGui.QPushButton(self.frame_2)
self.pb.setObjectName(_fromUtf8("login"))
self.pb.setText("Login")
self.connect(self.pb, SIGNAL("clicked()"), self.button_click)
def button_click(self):
text = self.lineEdit.text()
self.w3.label_4.setText(text)
self.w3.show()
self.hide()
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Ui_Dialog3(object):
def setupUi(self, Dialog):
self.frame_3 = QtGui.QFrame(Dialog)
self.frame_3.setGeometry(QtCore.QRect(30, 30, 311, 391))
self.frame_3.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtGui.QFrame.Raised)
self.frame_3.setObjectName(_fromUtf8("frame_3"))
self.label_3 = QtGui.QLabel(self.frame_3)
self.label_3.setGeometry(QtCore.QRect(50, 230, 72, 31))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.label_4 = QtGui.QLabel(self.frame_3)
self.label_4.setGeometry(QtCore.QRect(150, 230, 113, 33))
self.label_4.setObjectName(_fromUtf8("label_4"))
self.label_3.setText(_translate("Dialog", "Email", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.retranslateUi(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Dialog1(QtGui.QDialog, Ui_Dialog1):
def __init__(self, parent=None):
super(Dialog1, self).__init__(parent)
self.setupUi(self)
class Dialog2(QtGui.QDialog, Ui_Dialog2):
def __init__(self, w3, parent=None):
super(Dialog2, self).__init__(parent)
self.setupUi(self)
self.w3 = w3
class Dialog3(QtGui.QDialog, Ui_Dialog3):
def __init__(self, parent=None):
super(Dialog3, self).__init__(parent)
self.setupUi(self)
if __name__=="__main__":
import sys
a = QtGui.QApplication(sys.argv)
w1 = Dialog1()
w3 = Dialog3()
w2 = Dialog2(w3)
def on_timeout():
w1.hide()
w2.show()
w1.show()
QtCore.QTimer.singleShot(3000, on_timeout)
sys.exit(a.exec_())
我是 Qt 新手,想将 entry/lineEdit 字段值设置为另一个框架中可用的标签,该标签在另一个 class:
中定义from PyQt4 import QtCore, QtGui
import time
from PyQt4.QtCore import SIGNAL
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog1(object):
def setupUi(self, Dialog):
self.frame = QtGui.QFrame(Dialog)
self.frame.setGeometry(QtCore.QRect(40, 20, 311, 391))
self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame.setFrameShadow(QtGui.QFrame.Raised)
self.frame.setObjectName(_fromUtf8("frame"))
self.label = QtGui.QLabel(self.frame)
self.label.setGeometry(QtCore.QRect(120, 180, 72, 23))
self.label.setObjectName(_fromUtf8("label"))
self.label.setText(_translate("Dialog", "omniOS", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Ui_Dialog2(object):
def setupUi(self, Dialog):
self.frame_2 = QtGui.QFrame(Dialog)
self.frame_2.setGeometry(QtCore.QRect(30, 30, 311, 391))
self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
self.frame_2.setObjectName(_fromUtf8("frame_2"))
self.label_2 = QtGui.QLabel(self.frame_2)
self.label_2.setGeometry(QtCore.QRect(50, 230, 72, 31))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.lineEdit = QtGui.QLineEdit(self.frame_2)
self.lineEdit.setGeometry(QtCore.QRect(150, 230, 113, 33))
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.label_2.setText(_translate("Dialog", "Login", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.retranslateUi(Dialog)
self.pb = QtGui.QPushButton(self.frame_2)
self.pb.setObjectName(_fromUtf8("login"))
self.pb.setText("Login")
self.connect(self.pb, SIGNAL("clicked()"), self.button_click)
def button_click(self):
# shost is a QString object
text = self.lineEdit.text()
print (text)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Ui_Dialog3(object):
def setupUi(self, Dialog):
self.frame_3 = QtGui.QFrame(Dialog)
self.frame_3.setGeometry(QtCore.QRect(30, 30, 311, 391))
self.frame_3.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtGui.QFrame.Raised)
self.frame_3.setObjectName(_fromUtf8("frame_3"))
self.label_3 = QtGui.QLabel(self.frame_3)
self.label_3.setGeometry(QtCore.QRect(50, 230, 72, 31))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.label_4 = QtGui.QLabel(self.frame_3)
self.label_4.setGeometry(QtCore.QRect(150, 230, 113, 33))
self.label_4.setObjectName(_fromUtf8("label_4"))
self.label_3.setText(_translate("Dialog", "Email", None))
self.label_4.setText(_translate("Dialog", text, None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.retranslateUi(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Dialog1(QtGui.QDialog, Ui_Dialog1):
def __init__(self, parent=None):
super(Dialog1, self).__init__(parent)
self.setupUi(self)
class Dialog2(QtGui.QDialog, Ui_Dialog2):
def __init__(self, parent=None):
super(Dialog2, self).__init__(parent)
self.setupUi(self)
class Dialog3(QtGui.QDialog, Ui_Dialog3):
def __init__(self, parent=None):
super(Dialog3, self).__init__(parent)
self.setupUi(self)
if __name__=="__main__":
import sys
a = QtGui.QApplication(sys.argv)
w1 = Dialog1()
w2 = Dialog2()
w3 = Dialog3()
def on_timeout():
w1.hide()
w2.show()
def on_timeout1():
w2.hide()
w3.show()
w1.show()
QtCore.QTimer.singleShot(3000, on_timeout)
QtCore.QTimer.singleShot(6000, on_timeout1)
sys.exit(a.exec_())
我需要做的是将用户输入的lineEdit
(in class Dialog2
)值设置为label_4
(in class Dialog3
):
def button_click(self):
# shost is a QString object
text = self.lineEdit.text()
print (text)
问题:如何在用户输入电子邮件后更新Dialog3.label_4
?
更改"on_timeout1"函数
def on_timeout1():
w2.hide()
w3.show()
w3.label_4.setText(w2.lineEdit.text())
您的代码存在问题,您需要以某种方式 "communicate" 对话 2 和对话 3。对于这个简单的案例,我建议您执行以下操作:
- 修改
Dialog2
的构造函数以将对Dialog3
. 的实例的引用作为输入
- 在
Dialog2.button_clicked
方法中更新Dialog3
的实例并隐藏当前的Dialog2
实例。 - 更改
"__main__"
部分的登录名:显示w1
和w2
但 将w3
传递给w2
在构造函数中(所以必须先创建w3),去掉第二个定时器。
下面是我上述内容的完整实现。但是让我最后指出 UI 元素之间的 "communication" 是一个更微妙和复杂的话题。因此,如果您打算进行认真的 UI 开发,我建议您开始阅读模型-视图-控制器模式,例如 here.
from PyQt4 import QtCore, QtGui
import time
from PyQt4.QtCore import SIGNAL
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog1(object):
def setupUi(self, Dialog):
self.frame = QtGui.QFrame(Dialog)
self.frame.setGeometry(QtCore.QRect(40, 20, 311, 391))
self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame.setFrameShadow(QtGui.QFrame.Raised)
self.frame.setObjectName(_fromUtf8("frame"))
self.label = QtGui.QLabel(self.frame)
self.label.setGeometry(QtCore.QRect(120, 180, 72, 23))
self.label.setObjectName(_fromUtf8("label"))
self.label.setText(_translate("Dialog", "omniOS", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Ui_Dialog2(object):
def setupUi(self, Dialog):
self.frame_2 = QtGui.QFrame(Dialog)
self.frame_2.setGeometry(QtCore.QRect(30, 30, 311, 391))
self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
self.frame_2.setObjectName(_fromUtf8("frame_2"))
self.label_2 = QtGui.QLabel(self.frame_2)
self.label_2.setGeometry(QtCore.QRect(50, 230, 72, 31))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.lineEdit = QtGui.QLineEdit(self.frame_2)
self.lineEdit.setGeometry(QtCore.QRect(150, 230, 113, 33))
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.label_2.setText(_translate("Dialog", "Login", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.retranslateUi(Dialog)
self.pb = QtGui.QPushButton(self.frame_2)
self.pb.setObjectName(_fromUtf8("login"))
self.pb.setText("Login")
self.connect(self.pb, SIGNAL("clicked()"), self.button_click)
def button_click(self):
text = self.lineEdit.text()
self.w3.label_4.setText(text)
self.w3.show()
self.hide()
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Ui_Dialog3(object):
def setupUi(self, Dialog):
self.frame_3 = QtGui.QFrame(Dialog)
self.frame_3.setGeometry(QtCore.QRect(30, 30, 311, 391))
self.frame_3.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtGui.QFrame.Raised)
self.frame_3.setObjectName(_fromUtf8("frame_3"))
self.label_3 = QtGui.QLabel(self.frame_3)
self.label_3.setGeometry(QtCore.QRect(50, 230, 72, 31))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.label_4 = QtGui.QLabel(self.frame_3)
self.label_4.setGeometry(QtCore.QRect(150, 230, 113, 33))
self.label_4.setObjectName(_fromUtf8("label_4"))
self.label_3.setText(_translate("Dialog", "Email", None))
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(391, 437)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.retranslateUi(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "OmniOS", None))
class Dialog1(QtGui.QDialog, Ui_Dialog1):
def __init__(self, parent=None):
super(Dialog1, self).__init__(parent)
self.setupUi(self)
class Dialog2(QtGui.QDialog, Ui_Dialog2):
def __init__(self, w3, parent=None):
super(Dialog2, self).__init__(parent)
self.setupUi(self)
self.w3 = w3
class Dialog3(QtGui.QDialog, Ui_Dialog3):
def __init__(self, parent=None):
super(Dialog3, self).__init__(parent)
self.setupUi(self)
if __name__=="__main__":
import sys
a = QtGui.QApplication(sys.argv)
w1 = Dialog1()
w3 = Dialog3()
w2 = Dialog2(w3)
def on_timeout():
w1.hide()
w2.show()
w1.show()
QtCore.QTimer.singleShot(3000, on_timeout)
sys.exit(a.exec_())