单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值

Posted

技术标签:

【中文标题】单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值【英文标题】:How to read value of QLineEdit value from another Python file when Push Button is clicked 【发布时间】:2020-02-21 18:04:54 【问题描述】:

单击按钮时,我试图从另一个 python 文件中读取 QLineEdit 的值(prog 中的 search_dir_te)。但它失败了。请指导。

First.py:

class Display(QWidget): 

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        search_dir_label = QLabel('Directory to Search')
        self.search_dir_te = QLineEdit()
        search_dir_layout = QHBoxLayout(self)
        search_dir_layout.addWidget(search_dir_label)
        search_dir_layout.addWidget(self.search_dir_te)
        vert_layout1.addLayout(search_dir_layout)

        search_button = QPushButton('Search')
        search_button.clicked.connect(initiatesearch)   
        cancel_button = QPushButton('Cancel')
        search_cancel_layout = QHBoxLayout(self)
        search_cancel_layout.addWidget(search_button)
        search_cancel_layout.addWidget(cancel_button)
        search_cancel_layout.setAlignment(Qt.AlignCenter)
        vert_layout1.addLayout(search_cancel_layout)

Second.py

    def initiatesearch(self):
        print(self.search_dir_te.text())

我在First.py中导入了initialsearch函数

【问题讨论】:

【参考方案1】:

您将应用程序的各个部分不必要地交织在一起,这是设计不佳的标志。函数就像一个黑匣子:接收信息、处理信息并返回结果。在这种情况下,“initiatesearch”您应该只获取文本而不是小部件或其他元素:

def initiatesearch(text):
    print(text)
class Display(QWidget): 
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        search_dir_label = QLabel('Directory to Search')
        self.search_dir_te = QLineEdit()
        search_dir_layout = QHBoxLayout(self)
        search_dir_layout.addWidget(search_dir_label)
        search_dir_layout.addWidget(self.search_dir_te)
        vert_layout1.addLayout(search_dir_layout)

        search_button = QPushButton('Search')
        search_button.clicked.connect(self.onClicked)   
        cancel_button = QPushButton('Cancel')
        search_cancel_layout = QHBoxLayout(self)
        search_cancel_layout.addWidget(search_button)
        search_cancel_layout.addWidget(cancel_button)
        search_cancel_layout.setAlignment(Qt.AlignCenter)
        vert_layout1.addLayout(search_cancel_layout)

    def onClicked(self):
        initiatesearch(self.search_dir_te.text())

更新:

如果您仍然想知道这是一种不好的做法,那么您可以执行以下操作:

def onClicked(self):
    initiatesearch(self)
def initiatesearch(ui):
    print(ui.search_dir_te.text())

更新2:

from functools import partial
# ...
search_button.clicked.connect(partial(initiatesearch, self))

【讨论】:

但从技术上讲,有没有办法从另一个 python 文件中读取值? 我知道了,但有没有办法以及如何做到这一点?只是想知道。 我不想要中间函数(在您的示例中为 onClicked)。我想将控件直接传递给另一个文件。 @surajsabat 如果我的回答对您有帮助,请不要忘记标记为正确,如果您不知道该怎么做,请查看tour

以上是关于单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQt5 中同时读取和写入文件时正确执行多线程?

如何在不单击tkinter python的情况下读取单选按钮值

如何在单击按钮时暂停读取文本文件并在 mfc vc++ 中的单击按钮时恢复它?

当我们从另一个活动返回时如何刷新活动的数据?

关闭并显示按钮上的视图单击从另一个视图

我如何以编程方式从另一种方法单击 JavaFX 中的按钮?