Вы излишне переплетаете части своего приложения, и это признак плохого дизайна. Функция похожа на черный ящик: получать информацию, обрабатывать ее и возвращать результаты. В этом случае «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))