实战!tkinter、wxPython计算器实现
最近学习了Python的GUI编程,主要学习的模块是tkinter和wxPython模块。
学会了一些基本语法,实战做一个计算器,下面展示所有方法,可以根据目录查看
仓库链接:https://github.com/Github-Programer/PythonGUI_calculator
关爱弱者,不会Github的朋友看代码😄
Tk、Wx计算器目录
tkinter1——初学者适合的简单计算器
第一个TK1文件夹中的代码功能少,代码短,适合新手学习,看得明白
tkinter2——进阶,功能不完善
第二个TK2文件夹中的代码较长,我写了很多注释,大概可以看懂了。
有一些搞笑的话
里面的装饰真多,实现了的真少😓
wxPython1——简单计算器
第三个的代码是混乱的,玩着使用这个计算器,是我的第一个计算器实验版本,功能不怎么样
wxPython2——进阶计算器
第四个功能相对较全,格式不怎么样,等着看看最后的一个吧!但是不知道为什么无法生成exe👀
wxPython3——进阶计算器,带有特效
最后一个WX3文件夹中的代码必须和图片绑在一起,除非你懒,直接用EXE文件,你可以换一个图片(百度多得很),命名一致,保存在同一个文件夹中,作为背景,还有计算器刚生成时是没有键的,你再界面上滑动鼠标,键就出来了
CODE-5
不会Github的朋友看这里,这是其中一个
import wx
class Caluculate(wx.Frame):
def __init__(self, *args, **kwargs):
super(Caluculate, self).__init__(*args, **kwargs)
self.panel = wx.Panel(self)
self.printbtn = wx.TextCtrl(
self.panel, style=wx.TE_MULTILINE | wx.HSCROLL)
self.num1 = wx.Button(self.panel, label="1")
self.num2 = wx.Button(self.panel, label="2")
self.num3 = wx.Button(self.panel, label="3")
self.num4 = wx.Button(self.panel, label="+")
self.num5 = wx.Button(self.panel, label="4")
self.num6 = wx.Button(self.panel, label="5")
self.num7 = wx.Button(self.panel, label="6")
self.num8 = wx.Button(self.panel, label="-")
self.num9 = wx.Button(self.panel, label="7")
self.num10 = wx.Button(self.panel, label="8")
self.num11 = wx.Button(self.panel, label="9")
self.num12 = wx.Button(self.panel, label="*")
self.num13 = wx.Button(self.panel, label="0")
self.num14 = wx.Button(self.panel, label=".")
self.num15 = wx.Button(self.panel, label="=")
self.num16 = wx.Button(self.panel, label="/")
self.Boxset()
self.Event_bind()
self.Show()
def Boxset(self):
sbox1 = wx.BoxSizer()
sbox2 = wx.BoxSizer()
sbox3 = wx.BoxSizer()
sbox4 = wx.BoxSizer()
sbox5 = wx.BoxSizer()
vbox = wx.BoxSizer(wx.VERTICAL)
sbox1.Add(self.printbtn, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT | wx.DOWN, border=5)
sbox2.Add(self.num1, proportion=1, flag=wx.EXPAND | wx.LEFT, border=5)
sbox2.Add(self.num2, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT, border=2)
sbox2.Add(self.num3, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT, border=2)
sbox2.Add(self.num4, proportion=1, flag=wx.EXPAND | wx.RIGHT, border=5)
sbox3.Add(self.num5, proportion=1, flag=wx.EXPAND | wx.LEFT, border=5)
sbox3.Add(self.num6, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT, border=2)
sbox3.Add(self.num7, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT, border=2)
sbox3.Add(self.num8, proportion=1, flag=wx.EXPAND | wx.RIGHT, border=5)
sbox4.Add(self.num9, proportion=1, flag=wx.EXPAND | wx.LEFT, border=5)
sbox4.Add(self.num10, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT, border=2)
sbox4.Add(self.num11, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT, border=2)
sbox4.Add(self.num12, proportion=1,
flag=wx.EXPAND | wx.RIGHT, border=5)
sbox5.Add(self.num13, proportion=1, flag=wx.EXPAND | wx.LEFT, border=5)
sbox5.Add(self.num14, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT, border=2)
sbox5.Add(self.num15, proportion=1, flag=wx.EXPAND |
wx.LEFT | wx.RIGHT, border=2)
sbox5.Add(self.num16, proportion=1,
flag=wx.EXPAND | wx.RIGHT, border=5)
vbox.Add(sbox1, proportion=1, flag=wx.EXPAND | wx.ALL, border=2)
vbox.Add(sbox2, proportion=1, flag=wx.EXPAND | wx.ALL, border=2)
vbox.Add(sbox3, proportion=1, flag=wx.EXPAND | wx.ALL, border=2)
vbox.Add(sbox4, proportion=1, flag=wx.EXPAND | wx.ALL, border=2)
vbox.Add(sbox5, proportion=1, flag=wx.EXPAND | wx.ALL, border=2)
self.panel.SetSizer(vbox)
def test1appd(self, event):
prv_result = self.printbtn.GetValue()
self.printbtn.AppendText("1")
def test2appd(self, event):
self.printbtn.AppendText("2")
def test3appd(self, event):
self.printbtn.AppendText("3")
def test4appd(self, event):
self.printbtn.AppendText("+")
def test5appd(self, event):
self.printbtn.AppendText("4")
def test6appd(self, event):
self.printbtn.AppendText("5")
def test7appd(self, event):
self.printbtn.AppendText("6")
def test8appd(self, event):
self.printbtn.AppendText("-")
def test9appd(self, event):
self.printbtn.AppendText("7")
def test10appd(self, event):
self.printbtn.AppendText("8")
def test11appd(self, event):
self.printbtn.AppendText("9")
def test12appd(self, event):
self.printbtn.AppendText("*")
def test13appd(self, event):
self.printbtn.AppendText("0")
def test14appd(self, event):
self.printbtn.AppendText(".")
def test15appd(self, event):
pre_result = str(self.printbtn.GetValue())
result = eval(pre_result)
self.printbtn.SetValue(str(result))
def test16appd(self, event):
self.printbtn.AppendText("/")
def Event_bind(self):
self.num1.Bind(wx.EVT_BUTTON, self.test1appd)
self.num2.Bind(wx.EVT_BUTTON, self.test2appd)
self.num3.Bind(wx.EVT_BUTTON, self.test3appd)
self.num4.Bind(wx.EVT_BUTTON, self.test4appd)
self.num5.Bind(wx.EVT_BUTTON, self.test5appd)
self.num6.Bind(wx.EVT_BUTTON, self.test6appd)
self.num7.Bind(wx.EVT_BUTTON, self.test7appd)
self.num8.Bind(wx.EVT_BUTTON, self.test8appd)
self.num9.Bind(wx.EVT_BUTTON, self.test9appd)
self.num10.Bind(wx.EVT_BUTTON, self.test10appd)
self.num11.Bind(wx.EVT_BUTTON, self.test11appd)
self.num12.Bind(wx.EVT_BUTTON, self.test12appd)
self.num13.Bind(wx.EVT_BUTTON, self.test13appd)
self.num14.Bind(wx.EVT_BUTTON, self.test14appd)
self.num15.Bind(wx.EVT_BUTTON, self.test15appd)
self.num16.Bind(wx.EVT_BUTTON, self.test16appd)
if __name__ == "__main__":
app = wx.App()
Caluculate(None, title="计算器")
app.MainLoop()
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· Supergateway:MCP服务器的远程调试与集成工具
· C# 13 中的新增功能实操