簡體   English   中英

將lineEdit值設置為另一個類中的標簽(Pyqt4)

[英]Set lineEdit value to a label in an another class (Pyqt4)

我是Qt的新手,想將entry / lineEdit字段值設置為Label,該Label在另一個類中定義的另一個框架中可用:

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 (類Dialog2 )由用戶輸入的值label_4 (類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())

您的代碼的問題在於,您需要以某種方式將對話框2與對話框3“通信”。對於這種簡單的情況,我建議您執行以下操作:

  1. 修改的構造Dialog2采取作為輸入的一個實例的引用Dialog3
  2. Dialog2.button_clicked方法更新的實例Dialog3和隱藏當前Dialog2實例。
  3. 更改"__main__"部分的登錄名:顯示w1w2 w3 傳遞給構造函數中的w2 (因此必須首先創建w3),省去第二個計時器。

下面是我上面描述的完整實現。 但是,我最后要指出,UI元素之間的這種“交流”是一個更為微妙和復雜的話題。 因此,如果您打算進行認真的UI開發,我建議您開始閱讀有關Model-View-Controller模式的信息,例如在這里

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM