如何使窗口在同时初始化另一个窗口的类时不只显示一次?

2024-04-25 14:59:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在PyQt5上制作一个通讯录,无法完全显示窗口,因为它只显示一次

我知道出现这个问题是因为我试图在单击按钮时启动该类,但这是我想出的向上转换QLabel文本的唯一方法,否则将显示没有任何文本的窗口

下面是一些代码:

from PyQt5 import QtWidgets
class Window(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.resize(400,200)
        self.show()
        self.text = ''
        self.button = QtWidgets.QPushButton('Show')
        self.box = QtWidgets.QVBoxLayout()
        self.box.addWidget(self.button)
        self.setLayout(self.box)
        self.button.clicked.connect(self.init)

    def init(self):
        self.text = 'Text'
        win2 = AppearWindow()
        win2.show()

class AppearWindow(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.resize(100, 50)
        self.label = QtWidgets.QLabel()
        self.label.setText(win.text)
        self.box = QtWidgets.QVBoxLayout()
        self.box.addWidget(self.label)
        self.setLayout(self.box)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    win = Window()
    sys.exit(app.exec_())

如果我想在单击主窗口上的按钮时更新AppearWindow上的QLabel文本,如何使其显示


Tags: text文本selfboxinitdefsysbutton
1条回答
网友
1楼 · 发布于 2024-04-25 14:59:50

试试看:

from PyQt5 import QtWidgets
import random

class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        self.text = ''
        self.button = QtWidgets.QPushButton('Show')
        self.button.clicked.connect(self.init)

        self.box = QtWidgets.QVBoxLayout()
        self.box.addWidget(self.button)
        self.setLayout(self.box)

    def init(self):
        self.text = random.choice(['Text1', 'Text2', 'Text3'])
        self.win2 = AppearWindow(self.text)                         # + self

        self.win2.show()                                            # + self

class AppearWindow(QtWidgets.QWidget):
    def __init__(self, text):
        QtWidgets.QWidget.__init__(self)

        self.resize(100, 50)
        self.label = QtWidgets.QLabel()

#        self.label.setText(win.text)
        self.label.setText(text)

        self.box = QtWidgets.QVBoxLayout()
        self.box.addWidget(self.label)
        self.setLayout(self.box)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    win = Window()
    win.resize(400,200)
    win.show()
    sys.exit(app.exec_())

enter image description here

相关问题 更多 >

    热门问题