我试图在单击按钮时从另一个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功能
答案 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))