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

名为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中的全局变量对模块是全局的:无法从导入的模块/脚本中设置脚本的全局变量。

请记住,在极少数情况下,使用全局变量是正确的选择,大多数情况下,如果你使用它,你可能是出于错误的原因。

最新更新