如何解决在PyQT5中使用信号和插槽时,是否可以从其他python文件调用函数?
我正在使用PyQT5构建软件,并且试图将主应用程序文件与功能分开。单击时,某些小部件将调用某些功能。我想将这些功能存储在另一个python文件中。导入时出现错误。
from Open import OpenFile
我正在尝试在其他功能中使用OpenFile:
def experiment(self):
BSel = QPushButton("Select File",self.window)
self.window.tab1.layout.addWidget(BSel)
BSel.clicked.connect(self.OpenFile)
def OpenFile(self):
global fileName
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName,_ = QFileDialog.getopenFileName(self.window,"Import File","","All Files (*);;Data Files (*.asc);;Excel Files (*.csv)",options=options)
print(fileName)
单击QBushButton时,如何调用保存在单独的python文件中的函数OpenFile?
解决方法
您的函数OpenFile
使用self
参数,但它也是一个匿名函数(它不是类的成员);结果是self
将是调用它的信号给定的参数。
clicked
信号始终具有一个checked
参数(对于普通按钮通常为False
),因此self
函数中的OpenFile
该bool值,由于该值没有任何window
属性,将导致异常。
因此,您不能直接连接到它。您应该使用lambda或调用另一个实际调用OpenFile
的函数。由于您可能需要返回的文件名,因此在这里lambda不是正确的选择。
main.py
class SomeWindow(QtWidgets.QMainWindow):
def __init__(self):
# ...
self.button.clicked.connect(self.openFile)
def openFile(self):
fileName = OpenFile(self)
Open.py
def OpenFile(parent):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName,_ = QtWidgets.QFileDialog.getOpenFileName(
parent.window(),"Import File","","All Files (*);;Data Files (*.asc);;Excel Files (*.csv)",options=options)
return fileName
如果您希望通过在global fileName
中使用Open.py
来最终在主脚本中“设置” fileName
,那么您就偏离了轨道。
Python中的全局变量是模块的全局变量:无法从导入的模块/脚本的 脚本上设置全局变量。
请记住,在大多数情况下,使用全局变量是正确的选择,并且在大多数情况下,如果使用全局变量,可能是出于错误的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。