【问题标题】:How to read value of QLineEdit value from another Python file when Push Button is clicked单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值
【发布时间】: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函数

【问题讨论】:

    标签: python pyqt5


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2020-06-05
    • 1970-01-01
    • 2019-07-15
    • 2021-12-08
    相关资源
    最近更新 更多