关于PyQt5的问题?

望向缸外的大眼睛 2019-03-04 05:12:05
先上代码(刚刚测试了下PyQt能否和tkinter一样使用lambda, 发现了一个不理解的问题, 代码中打印出的w为bool类型,这是什么情况?):
import sys
from PyQt5.QtWidgets import (QWidget, QApplication, QGridLayout,
QLineEdit, QPushButton)
class CalcUi(QWidget):
def __init__(self):
QWidget.__init__(self)
self.generalDict = {}
self.setWindowTitle("Calc")
self.initUi()
def initUi(self):
uiDict = {'Row1': ('7', '8', '9', '/'),
'Row2': ('4', '5', '6', '*'),
'Row3': ('1', '2', '3', '+'),
'Row4': ('-', '0', '.', '='),
'Row5': ('c' ),
}
qGridLayout = QGridLayout(self)
inputLine = QLineEdit()
qGridLayout.addWidget(inputLine, 0, 0, 1, 4)
for line in uiDict:
for labelIndex in range(len(uiDict[line])):
btn = QPushButton(uiDict[line][labelIndex])
btn.setToolTip(btn.text())
self.generalDict[btn] = btn.text()
if len(uiDict[line]) == 1:
qGridLayout.addWidget(btn, 5, 0, 1, 4)
else:
qGridLayout.addWidget(btn)

for func, label in self.generalDict.items():
# 这个位置点击事件后,打印出来的w类型为bool类型
func.clicked.connect(lambda w=func:print(type(w)))

if __name__ == '__main__':
app = QApplication(sys.argv)
win = CalcUi()
win.show()
sys.exit(app.exec_())



在一个空白的python文件中测试了下,就没发现类型被私自转换的现象,上代码:
if __name__ == '__main__':
add = lambda x=5: print(type(x))
add() # 这个位置打印出来的x的类型为int型,符合原x类型
...全文
96 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
目测Qt公司为了提高自己IDE的使用量,不让程序员写用代码写界面,故意把connect做了一些设定,难怪写代码时,连个提示都没有,使用IDE图形界面设计后,人会变的比较傻.

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧