我试图从列表中创建一个简单的键盘QtGui.QPushButton物体。在
class Xkeyboard(QtGui.QWidget):
'''Special virtual keyboard for any language.'''
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.MainLayout = QtGui.QVBoxLayout()
self.TextEntry = QtGui.QTextEdit()
self.Keyboard = QtGui.QVBoxLayout()
self.MainLayout.addWidget(self.TextEntry)
self.MainLayout.addLayout(self.Keyboard)
self.setLayout(self.MainLayout)
def addRow(self, keys):
layout = QtGui.QHBoxLayout()
buttons = [QtGui.QPushButton(unicode(key)) for key in keys]
for button in buttons:
key = keys[buttons.index(button)]
layout.addWidget(button)
button.clicked.connect(
lambda key: self.keyClick(key))
self.keyClick(key)
self.Keyboard.addLayout(layout)
def keyClick(self, key):
self.TextEntry.insertPlainText(key)
问题是lambda返回False
而不是key。我做错什么了?在
那
lambda
:相当于:
^{pr2}$所以,基本上你接受了来自},并将其传递给
clicked
信号的一个参数,这个参数是按钮的returnschecked
状态,因为你没有可检查的按钮,所以它是{keyClick
方法。keyClick
方法在for循环中没有接收key
参数。在可能的解决方案是编写您的
lambda
接受两个参数,其中一个参数的默认值为您的预期值:为什么你需要做
key=key
是一个完全不同的主题。^来自相关主题的{a2}(以及其他答案)可能会对它有所启示。在正确的方法是使用QButtonGroup,它正是为这种情况而设计的。在
下面是一种重新编写示例以使用它的方法:
相关问题 更多 >
编程相关推荐