此代码为课后作业,上传来仅供和我一样的python小白们参考学习,大佬们请勿喷(。・ω・。)
如果有建议的话可以在评论区留言,多谢大佬们。
import wx
import math
class MyFrame(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,parent,title="计算器",size=(350,450))
self.Ui()
self.Center()
def Ui(self):
#创建绘板
panel = wx.Panel(self)
#创建垂直布局
box_v1 = wx.BoxSizer(wx.VERTICAL)
#创建水平布局
box_h0 = wx.BoxSizer(wx.HORIZONTAL)
box_h1 = wx.BoxSizer(wx.HORIZONTAL)
box_h2 = wx.BoxSizer(wx.HORIZONTAL)
box_h3 = wx.BoxSizer(wx.HORIZONTAL)
box_h4 = wx.BoxSizer(wx.HORIZONTAL)
box_h5 = wx.BoxSizer(wx.HORIZONTAL)
box_h6 = wx.BoxSizer(wx.HORIZONTAL)
#设置样式为右对齐,且文本控件为只读
self.text = wx.TextCtrl(parent=panel, size=(320,70), style=wx.TE_RIGHT|wx.TE_READONLY) #为什么必须加self.才能在下面的方法中使用
# 创建字体
font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
self.text.SetFont(font)
#创建按钮
btn_CE = wx.Button(parent=panel, label="CE")
btn_0 = wx.Button(parent=panel, label="0")
btn_1 = wx.Button(parent=panel, label="1")
btn_2 = wx.Button(parent=panel, label="2")
btn_3 = wx.Button(parent=panel, label="3")
btn_4 = wx.Button(parent=panel, label="4")
btn_5 = wx.Button(parent=panel, label="5")
btn_6 = wx.Button(parent=panel, label="6")
btn_7 = wx.Button(parent=panel, label="7")
btn_8 = wx.Button(parent=panel, label="8")
btn_9 = wx.Button(parent=panel, label="9")
btn_s1 = wx.Button(parent=panel, label=".")
btn_a1 = wx.Button(parent=panel, label="+")
btn_a2 = wx.Button(parent=panel, label="-")
btn_a3 = wx.Button(parent=panel, label="*")
btn_a4 = wx.Button(parent=panel, label="/")
btn_d1 = wx.Button(parent=panel, label="乘方")
btn_d2 = wx.Button(parent=panel, label="平方根")
btn_d3 = wx.Button(parent=panel, label="正弦")
btn_d4 = wx.Button(parent=panel, label="余弦")
btn_z = wx.Button(parent=panel, label="=")
btn_c1 = wx.Button(parent=panel, label="<-")
btn_c2 = wx.Button(parent=panel, label="(")
btn_c3 = wx.Button(parent=panel, label=")")
# 添加组件
box_h0.Add(self.text, proportion=1, flag=wx.EXPAND|wx.ALL, border=12)
box_h1.Add(btn_d4, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h1.Add(btn_d3, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h1.Add(btn_d2, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h1.Add(btn_d1, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h2.Add(btn_7, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h2.Add(btn_8, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h2.Add(btn_9, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h2.Add(btn_a1, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h3.Add(btn_4, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h3.Add(btn_5, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h3.Add(btn_6, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h3.Add(btn_a2, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h4.Add(btn_1, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h4.Add(btn_2, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h4.Add(btn_3, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h4.Add(btn_a3, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h5.Add(btn_z, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h5.Add(btn_0, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h5.Add(btn_s1, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h5.Add(btn_a4, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
box_h6.Add(btn_c1, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
box_h6.Add(btn_c2, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
box_h6.Add(btn_c3, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
box_h6.Add(btn_CE, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
#将水平布局添加入垂直布局中
box_v = wx.BoxSizer(wx.VERTICAL)
box_v.Add(box_h0, proportion=1)
box_v.Add(box_h1, proportion=1)
box_v.Add(box_h6, proportion=1)
box_v.Add(box_h2, proportion=1)
box_v.Add(box_h3, proportion=1)
box_v.Add(box_h4, proportion=1)
box_v.Add(box_h5, proportion=1)
#设置绘板布局样式
panel.SetSizer(box_v)
#绑定方法
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_CE, btn_CE)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_0, btn_0)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_1, btn_1)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_2, btn_2)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_3, btn_3)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_4, btn_4)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_5, btn_5)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_6, btn_6)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_7, btn_7)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_8, btn_8)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_9, btn_9)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_s1, btn_s1)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_a1, btn_a1)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_a2, btn_a2)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_a3, btn_a3)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_a4, btn_a4)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_z, btn_z)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_d1, btn_d1)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_d2, btn_d2)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_d3, btn_d3)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_d4, btn_d4)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_c1, btn_c1)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_c2, btn_c2)
self.Bind(wx.EVT_BUTTON, self.OnClick_btn_c3, btn_c3)
#添加按钮方法
#CE清除所有内容
def OnClick_btn_CE(self, event):
self.text.SetValue("")
#其他按钮
def OnClick_btn_0(self,event):
self.text.AppendText("0")
def OnClick_btn_1(self,event):
self.text.AppendText("1")
def OnClick_btn_2(self,event):
self.text.AppendText("2")
def OnClick_btn_3(self,event):
self.text.AppendText("3")
def OnClick_btn_4(self,event):
self.text.AppendText("4")
def OnClick_btn_5(self,event):
self.text.AppendText("5")
def OnClick_btn_6(self,event):
self.text.AppendText("6")
def OnClick_btn_7(self,event):
self.text.AppendText("7")
def OnClick_btn_8(self,event):
self.text.AppendText("8")
def OnClick_btn_9(self,event):
self.text.AppendText("9")
def OnClick_btn_s1(self,event):
self.text.AppendText(".")
def OnClick_btn_a1(self,event):
self.text.AppendText("+")
def OnClick_btn_a2(self,event):
self.text.AppendText("-")
def OnClick_btn_a3(self,event):
self.text.AppendText("*")
def OnClick_btn_a4(self,event):
self.text.AppendText("/")
#添加乘方等其他方法
def OnClick_btn_d1(self,event):
self.text.AppendText("**")
def OnClick_btn_d2(self,event):
value = float(self.text.GetValue())
value1 = str(math.sqrt(value))
self.text.SetValue(value1)
def OnClick_btn_d3(self,event):
value = float(self.text.GetValue())
value1 = str(math.sin(value))
self.text.SetValue(value1)
def OnClick_btn_d4(self,event):
value = float(self.text.GetValue())
value1 = str(math.cos(value))
self.text.SetValue(value1)
def OnClick_btn_z(self,event):
z_str = self.text.GetValue()
z_result = eval(z_str)
self.text.SetValue(str(z_result))
def OnClick_btn_c1(self,event):
value = self.text.GetValue()
value1 = value[0:-1]
self.text.SetValue(value1)
def OnClick_btn_c2(self,event):
self.text.AppendText("(")
def OnClick_btn_c3(self,event):
self.text.AppendText(")")
if __name__ == "__main__":
app = wx.App()
MyFrame(None).Show(True)
app.MainLoop()
最后运行的界面就是下面这样了,不过有一些逻辑没有完善,如果你输入的字符串有错误的话,是会报错无法运行的。