import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, id=-1, title="计算器", size=(384, 378))
panel = wx.Panel(self)
self.text_res = wx.TextCtrl(panel, -1, size=(310, 35), pos=(37,33), style=wx.TE_READONLY|wx.TE_MULTILINE)
self.btn_1 = wx.Button(panel, -1, "1", size=(58, 38), pos=(37, 106))
self.btn_2 = wx.Button(panel, -1, "2", size=(58, 38), pos=(121, 106))
self.btn_3 = wx.Button(panel, -1, "3", size=(58, 38), pos=(205, 106))
self.btn_4 = wx.Button(panel, -1, "4", size=(58, 38), pos=(37, 170))
self.btn_5 = wx.Button(panel, -1, "5", size=(58, 38), pos=(121, 170))
self.btn_6 = wx.Button(panel, -1, "6", size=(58, 38), pos=(205, 170))
self.btn_7 = wx.Button(panel, -1, "7", size=(58, 38), pos=(37, 234))
self.btn_8 = wx.Button(panel, -1, "8", size=(58, 38), pos=(121, 234))
self.btn_9 = wx.Button(panel, -1, "9", size=(58, 38), pos=(205, 234))
self.btn_0 = wx.Button(panel, -1, "0", size=(58, 38), pos=(37, 298))
self.btn_clear = wx.Button(panel, -1, "Clear", size=(58, 38), pos=(121, 298))
self.btn_add = wx.Button(panel, -1, "+", size=(58, 38), pos=(289, 106))
self.btn_sub = wx.Button(panel, -1, "-", size=(58, 38), pos=(289, 170))
self.btn_mul = wx.Button(panel, -1, "x", size=(58, 38), pos=(289, 234))
self.btn_dev = wx.Button(panel, -1, "/", size=(58, 38), pos=(205, 298))
self.btn_equal = wx.Button(panel, -1, "=", size=(58, 38), pos=(289, 298))
self.Bind(wx.EVT_BUTTON, self.num_1, self.btn_1)
self.Bind(wx.EVT_BUTTON, self.num_2, self.btn_2)
self.Bind(wx.EVT_BUTTON, self.num_3, self.btn_3)
self.Bind(wx.EVT_BUTTON, self.num_5, self.btn_5)
self.Bind(wx.EVT_BUTTON, self.num_4, self.btn_4)
self.Bind(wx.EVT_BUTTON, self.num_6, self.btn_6)
self.Bind(wx.EVT_BUTTON, self.num_7, self.btn_7)
self.Bind(wx.EVT_BUTTON, self.num_8, self.btn_8)
self.Bind(wx.EVT_BUTTON, self.num_9, self.btn_9)
self.Bind(wx.EVT_BUTTON, self.num_0, self.btn_0)
self.Bind(wx.EVT_BUTTON, self.clear, self.btn_clear)
self.Bind(wx.EVT_BUTTON, self.add, self.btn_add)
self.Bind(wx.EVT_BUTTON, self.sub, self.btn_sub)
self.Bind(wx.EVT_BUTTON, self.dev, self.btn_dev)
self.Bind(wx.EVT_BUTTON, self.mul, self.btn_mul)
self.Bind(wx.EVT_BUTTON, self.equal, self.btn_equal)
def num_1(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('1')
def num_2(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('2')
def num_3(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('3')
def num_4(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('4')
def num_5(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('5')
def num_6(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('6')
def num_7(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('7')
def num_8(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('8')
def num_9(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('9')
def num_0(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('0')
def add(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('+')
def sub(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('-')
def mul(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('x')
def dev(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
self.text_res.Clear()
self.text_res.AppendText('/')
def equal(self, event):
user_input = self.text_res.GetValue()
if '=' in user_input:
return -1
num = []
syn = []
s = ''
for each in user_input:
if each not in ('+', '-', 'x', '/'):
s += each
else:
if len(s) == 0 and each in ('+','-'):
syn.append(each)
num.append(0)
continue
if len(s) == 0 and each not in ('+','-'):
dlg = wx.MessageDialog(None, message="开头的数字缺失!", caption="警告",style=wx.OK)
dlg.ShowModal()
dlg.Destroy()
return -1
num.append(int(s))
if (len(syn) == 0) or (each in ('x', '/') and syn[-1] in ('+','-')):
syn.append(each)
else:
fu = syn[-1]
num1 = num[-2]
num2 = num[-1]
num.pop()
num.pop()
if fu == '+':
num.append(num1+num2)
elif fu == '-':
num.append(num1 - num2)
elif fu == 'x':
num.append(num1 * num2)
elif fu == '/':
num.append(num1 / num2)
else:
return -1
syn.pop()
syn.append(each)
s = ''
num.append(int(s))
res = 0
if syn[-1] in ('x', '/'):
num1 = num[-2]
num2 = num[-1]
num.pop()
num.pop()
if syn[-1] == 'x':
num.append(num1 * num2)
else:
num.append(num1 / num2)
syn.pop()
if len(num) == 1:
res = num[0]
for i in range(0, len(syn)):
if syn[i] == '+':
res += num[i] + num[i + 1]
elif syn[i] == '-':
res += num[i] - num[i + 1]
elif syn[i] == 'x':
res += num[i] * num[i + 1]
elif syn[i] == '/':
res += num[i] / num[i + 1]
else:
return -1
self.text_res.AppendText(' = {}'.format(res))
def clear(self, event):
self.text_res.Clear()
if __name__ == '__main__':
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()
用Python写一个简单的计算器
最新推荐文章于 2024-02-29 22:19:38 发布
这个博客展示了如何使用wxPython库构建一个基本的计算器。代码定义了一个MyFrame类,继承自wx.Frame,包含了数字按钮、运算符按钮以及清空和等于按钮。每个按钮都绑定了相应的事件处理函数,用于在文本框中显示输入和执行计算操作。当按下等号按钮时,程序会解析用户的输入并计算结果。
摘要由CSDN通过智能技术生成