为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_花开花谢_0 2023-02-15 15:27:42
下面的代码适用于 PySide,但不适用于 PySide2:当操作被触发时 (Ctrl+S),函数saveResults被调用filename=False,而不是None我所期望的(和 PySide 的情况一样:您可以通过切换 import 语句来测试)。我想知道行为是否发生了变化,或者我的代码中有什么需要修复的?(我知道我可以使用 lambda 技巧,我更好奇是 Slot 语法还是需要精度的连接)。import sys# PySide2 won't pop up the QFileDialogfrom PySide2.QtGui import *from PySide2.QtWidgets import *from PySide2.QtCore import Slot# # PySide works fine:# from PySide.QtGui import *# from PySide.QtCore import Slotclass 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_()
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

这似乎是一个错误,解决方法是通过关键字触发连接:


# ...

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

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

act.setShortcuts([QKeySequence.Save])

self.fileMenu.addAction(act)

# ...


查看完整回答
反对 回复 2023-02-15
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信