我正在使用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)
名为OpenFile的函数保存在Open.py中。该函数为:
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
参数,但它也是一个匿名函数(它不是类的成员(;结果是CCD_ 3将是调用它的信号所给出的自变量
clicked
信号总是有一个checked
参数(对于普通按钮,通常是False
(,因此OpenFile
函数中的self
将是该布尔值,这将导致异常,因为该值没有任何window
属性。
因此,您不能直接连接到它。您应该使用lambda或调用另一个实际调用OpenFile
的函数。由于您可能需要返回的文件名,因此lambda不是正确的选择。
主.py
class SomeWindow(QtWidgets.QMainWindow):
def __init__(self):
# ...
self.button.clicked.connect(self.openFile)
def openFile(self):
fileName = OpenFile(self)
打开.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
如果你希望通过在CCD_ 12中使用CCD_;设置";fileName
在你的主脚本中,你偏离了轨道。
Python中的全局变量对模块是全局的:无法从导入的模块/脚本中设置脚本的全局变量。
请记住,在极少数情况下,使用全局变量是正确的选择,大多数情况下,如果你使用它,你可能是出于错误的原因。