将QLabelText更改为QLineEdit文本更改

问题描述 投票:0回答:1

[这个带有setText的QLineEdit被设置为预定义的值,并且其中包含一个带有QLabel的QDialog,它应该显示QLineEdit中的内容。下面的代码显示了这种情况。

import sys
import os
import datetime
from PySide2.QtWidgets import *
from PySide2 import *

now = datetime.datetime.now()
now_str = now.strftime("%H.%M.%S,%d/%m/%y")
default_text = (str("Sugar_" + now_str))


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.resize(600, 500)

        btn = QPushButton("show dialog")

        mw_layout = QVBoxLayout()
        mw_layout.addWidget(btn)
        self.setLayout(mw_layout)

        btn.clicked.connect(show_d)


class dialog(QDialog):
    def __init__(self):
        super(dialog, self).__init__()

        self.resize(400, 350)

        title = QLineEdit()
        title.setText(default_text)

        show_title = QPushButton("Show title")
        cancel = QPushButton("Cancel")

        d_layout = QVBoxLayout()
        d_layout.addWidget(title)
        d_layout.addWidget(show_title)
        d_layout.addWidget(cancel)
        self.setLayout(d_layout)

        t = title.text()

        title_dialog = QDialog()
        label = QLabel()
        label.setText("The title is " + title.text())
        ok = QPushButton("OK!")
        t_layout = QVBoxLayout()
        t_layout.addWidget(label)
        t_layout.addWidget(ok)
        title_dialog.setLayout(t_layout)

        def show_t():
            title_dialog.exec_()
            title_dialog.setModal(True)

        def close_t():
            title_dialog.accept()

        show_title.clicked.connect(show_t)
        ok.clicked.connect(close_t)

        cancel.clicked.connect(self.close_d)

    def close_d(self):
        self.reject()


def show_d():
    d = dialog()
    d.exec_()
    d.setModal(True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = MainWindow()
    MainWindow.show()
    sys.exit(app.exec_())

但是这并不像我期望的那样工作。即使更改了QLineEdit中的文本,QLabel文本也只显示默认文本。

控制台还显示以下错误;

qt.xkb.compose:无法创建撰写表。

我认为显然有什么问题,但我似乎找不到。任何帮助表示赞赏。

python python-3.x pyside2
1个回答
0
投票

您必须在特定事件之前更新文本,例如在显示对话框之前的瞬间:

class dialog(QDialog):
    def __init__(self):
        super(dialog, self).__init__()

        self.resize(400, 350)

        self.title_lineedit = QLineEdit(default_text)

        show_title = QPushButton("Show title")
        cancel = QPushButton("Cancel")

        d_layout = QVBoxLayout(self)
        d_layout.addWidget(self.title_lineedit)
        d_layout.addWidget(show_title)
        d_layout.addWidget(cancel)

        self.title_dialog = QDialog()
        self._title_label = QLabel()

        ok = QPushButton("OK!")
        t_layout = QVBoxLayout(self.title_dialog)
        t_layout.addWidget(self._title_label)
        t_layout.addWidget(ok)

        show_title.clicked.connect(self.on_clicked)
        ok.clicked.connect(self.title_dialog.reject)
        cancel.clicked.connect(self.reject)

        self.update_label()

    def update_label(self):
        self._title_label.setText("The title is " + self.title_lineedit.text())

    def on_clicked(self):
        self.update_label()
        self.title_dialog.exec_()
© www.soinside.com 2019 - 2024. All rights reserved.