下面的代码适用于 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 回答
![?](http://img1.sycdn.imooc.com/5333a207000118af02200220-100-100.jpg)
宝慕林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)
# ...
添加回答
举报
0/150
提交
取消