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

时间:2020-02-21 18:04:54

标签: python pyqt5

我试图在单击按钮时从另一个python文件读取QLineEdit的值(在编中为search_dir_te)。但这是失败的。请指导。

第一.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中导入了initiatesearch功能

1 个答案:

答案 0 :(得分:0)

您不必要地纠缠了应用程序的各个部分,这表明设计不好。函数就像一个黑盒子:接收信息,对其进行处理并返回结果。在这种情况下,“ 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())

Update2:

from functools import partial
# ...
search_button.clicked.connect(partial(initiatesearch, self))
相关问题