单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值
Posted
技术标签:
【中文标题】单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值【英文标题】:How to read value of QLineEdit value from another Python file when Push Button is clicked 【发布时间】: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函数
【问题讨论】:
【参考方案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以上是关于单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在不单击tkinter python的情况下读取单选按钮值