猿问

当槽函数的默认参数为 None 时,PySide2 的行为与 PySide 不同

下面的代码适用于 PySide,但不适用于 PySide2:


当操作被触发时 (Ctrl+S),函数saveResults被调用filename=False,而不是None我所期望的(和 PySide 的情况一样:您可以通过切换 import 语句来测试)。


我想知道行为是否发生了变化,

或者我的代码中有什么需要修复的?(我知道我可以使用 lambda 技巧,我更好奇是 Slot 语法还是需要精度的连接)。


import sys


# PySide2 won't pop up the QFileDialog

from PySide2.QtGui import *

from PySide2.QtWidgets import *

from PySide2.QtCore import Slot


# # PySide works fine:

# from PySide.QtGui import *

# from PySide.QtCore import Slot



class MyWindow(QMainWindow):

    def __init__(self):

        QMainWindow.__init__(self)


        self.fileMenu = self.menuBar().addMenu("&File")

        act = QAction("Save results...", self)

        act.triggered.connect(self.saveResults)  # <--- should call saveResults(None)

        #act.triggered.connect(lambda: self.saveResults(None))   # fixes the issue

        act.setShortcuts([QKeySequence.Save])

        self.fileMenu.addAction(act)


    @Slot()

    def saveResults(self, filename=None):

        print ('Calling saveResults, filename is', filename)

        if filename is None:

            (filename, selectedfilter) = QFileDialog.getSaveFileName(self,"Save results as ", ".", "NPY Files (*.npy);;Image files (*.png *.tif *.tiff *.bmp);;All files (*)")

            # ... exit if cancel clicked

        # finally save the file:

        print('Saving', filename)



qt_app = QApplication(sys.argv)

app = MyWindow()

app.show()

qt_app.exec_()


qq_花开花谢_0
浏览 82回答 1
1回答

宝慕林4294392

这似乎是一个错误,解决方法是通过关键字触发连接:# ...self.fileMenu = self.menuBar().addMenu("&File")act = QAction("Save results...", self, triggered=self.saveResults)act.setShortcuts([QKeySequence.Save])self.fileMenu.addAction(act)# ...
随时随地看视频慕课网APP

相关分类

Python
我要回答