我正在使用wxPyhton开发计算器。我在Textctrlenter中显示值时遇到麻烦。
self.nameTxt = wx.TextCtrl( self, wx.ID_ANY,"",pos=(10,20),size=(260,30))
self.clickcount1 = 1
one = self.clickcount1
getBtn = wx.Button(self, self.clickcount1,label="1",pos=(10,60),size(40,40))
btn.Bind(wx.EVT_BUTTON, lambda btnClick, temp=button_name:
self.OnButton(btnClick(1), temp) )
答案 0 :(得分:0)
您的lamba
函数不正确。
getBtn中的size(40,40)
参数应为size=(40,40)
Bind
应该在getBtn
上,而不是btn
根本不使用变量one
您将self.clickcount
用作按钮id
,如果不使用-1
或wx.ID_ANY
,则wxpython会为您生成一个唯一的ID。
我认为您正在尝试执行以下操作:
import wx
class TestFrame(wx.Frame):
def __init__(self, *args):
wx.Frame.__init__(self, *args)
self.nameTxt = wx.TextCtrl( self, wx.ID_ANY,"",pos=(10,20),size=(260,30))
getBtn1 = wx.Button(self, id=-1, label="1", pos=(10,60), size=(40,40))
getBtn1.Bind(wx.EVT_BUTTON, lambda event: self.OnButton(event, button=1) )
getBtn2 = wx.Button(self, id=-1, label="2", pos=(50,60), size=(40,40))
getBtn2.Bind(wx.EVT_BUTTON, lambda event: self.OnButton(event, button=2) )
getBtn3 = wx.Button(self, id=-1, label="3", pos=(90,60), size=(40,40))
getBtn3.Bind(wx.EVT_BUTTON, lambda event: self.OnButton(event, button=3) )
self.Show()
def OnButton(self, event, button):
print ("Button number ", button)
curr_value = self.nameTxt.GetValue()
# If a value exists add to it, otherwise display value of pressed button
try:
curr_value = int(curr_value) + button
self.nameTxt.SetValue(str(curr_value))
except:
self.nameTxt.SetValue(str(button))
if __name__ == "__main__":
app = wx.App()
myframe = TestFrame(None, -1, "Calculator Test")
app.MainLoop()
关于您对要“ 11111111”的评论:
将功能OnButton
更改为:
def OnButton(self, event, button):
print ("Button number ", button)
curr_value = self.nameTxt.GetValue()
curr_value = curr_value + str(button)
self.nameTxt.SetValue(curr_value)