Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单击按钮返回值_Python_Function_Pyqt - Fatal编程技术网

Python 单击按钮返回值

Python 单击按钮返回值,python,function,pyqt,Python,Function,Pyqt,我很难从函数中返回一个值,当我单击PyQt中的按钮时会调用该函数。这就是我想给变量赋值的方式: file_path = self.Button_open.clicked.connect(self.OpenTextFile) 整个函数如下所示: def OpenTextFile(self): dialog = QtGui.QFileDialog() dialog.setWindowTitle("Choose a file to open") dialog.setFileM

我很难从函数中返回一个值,当我单击PyQt中的按钮时会调用该函数。这就是我想给变量赋值的方式:

file_path = self.Button_open.clicked.connect(self.OpenTextFile)
整个函数如下所示:

def OpenTextFile(self):
    dialog = QtGui.QFileDialog()
    dialog.setWindowTitle("Choose a file to open")
    dialog.setFileMode(QtGui.QFileDialog.ExistingFile)
    dialog.setNameFilter("Text (*.txt);; All files (*.*)")
    dialog.setViewMode(QtGui.QFileDialog.Detail)

    filename = QtCore.QStringList()

    if(dialog.exec_()):
        file_name = dialog.selectedFiles()
    plain_text = open(file_name[0]).read()
    self.Editor.setPlainText(plain_text)
    return str(file_name[0])
现在,当我想将文件路径传递给另一个函数时,python解释器说

self.Button\u save.clicked.connect(self.SaveTextFile(文件路径)) TypeError:connect()插槽参数应为可调用或信号,而不是“NoneType”


有什么想法可以让它工作吗?

将文件路径存储在类级变量中,并在button click方法中更新该值

self.file_path = None
self.Button_open.clicked.connect(self.OpenTextFile)
然后呢,

def OpenTextFile(self):
    dialog = QtGui.QFileDialog()
    dialog.setWindowTitle("Choose a file to open")
    dialog.setFileMode(QtGui.QFileDialog.ExistingFile)
    dialog.setNameFilter("Text (*.txt);; All files (*.*)")
    dialog.setViewMode(QtGui.QFileDialog.Detail)

    filename = QtCore.QStringList()

    if(dialog.exec_()):
        file_name = dialog.selectedFiles()
    plain_text = open(file_name[0]).read()
    self.Editor.setPlainText(plain_text)
    self.file_path = str(file_name[0])
也是你的

self.Button_save.clicked.connect(self.SaveTextFile(file_path))
应该是

self.Button_save.clicked.connect(self.SaveTextFile)
在保存单击方法中

def SaveTextFile(self):
    save(self.file_path)     # Your code to save file

获取文件路径的代码无法工作。connect方法不调用connected函数,也不会分配其返回值。通常,我们可能希望在创建GUI时完成连接,而
file\u path
变量应该在稍后调用open方法时分配。您没有提供跨越从open方法到close方法的范围的代码,但是一个可能的解决方案是使用一个类级别的变量,正如Muhammad Tahir Butt所建议的那样

但是,您引用的错误来自以下代码行:

self.Button_save.clicked.connect(self.SaveTextFile(file_path))
这里的问题是,您没有将按钮单击连接到函数,而是连接到调用函数的结果。Python在调用
connect
之前计算参数。这肯定不是您想要的:您的函数返回导致错误的
None

还有其他方法可以实现您想要的功能,但最直接的解决方法是创建一个部分求值的函数或lambda表达式,该表达式捕获
文件路径的值,但尚未执行该函数。例如:

import functools

...

self.Button_save.clicked.connect(
        functools.partial(self.SaveTextFile,file_path))
这可以在不更改相关变量的情况下解决调用问题

但是,请注意,只有在调用connect方法时,
file\u path
具有所需的值时,此方法才有效。我们无法判断您的代码中是否存在这种情况,但在字里行间阅读,可能不会。因此,公认的答案可能更适合你的情况