微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PyQT5中使用信号和插槽时,是否可以从其他python文件调用函数?

如何解决在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参数,但它也是一个匿名函数(它不是类的成员);结果是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 举报,一经查实,本站将立刻删除。