Как прочитать значение QLineEdit из другого файла Python при нажатии кнопки Pu sh - PullRequest
0 голосов
/ 21 февраля 2020

Пытаюсь прочитать значение QLineEdit (search_dir_te в prog) из другого файла python при нажатии кнопки pu sh. Но это терпит неудачу. Пожалуйста, руководство.

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())

I импортировали функцию initiatesearch в First.py

1 Ответ

0 голосов
/ 21 февраля 2020

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