学习笔记(50):Python实战编程-Frame

立即学习:https://edu.csdn.net/course/play/19711/343112?utm_source=blogtoedu

1.Frame:是内嵌布局管理器,针对不同功能的组件进行区域划分,在各自的区域内可以使用不同的布局,但是总的frame布局方式还是一致的

 

 2.以计算器为例

步骤:

1)将组件划分成不同的frame

2)对每一个frame内部的组件进行布局

3)对组件进行事件的绑定

4)最终实现的是一级计算的简单计算器

 

知识点:

1)tkinter.Entry():单行输入文本框

2)tkinter.Text():多行输入文本框

3)event.widget["text"]:获取绑定了该事件的组件上面的文本

4)正则表达式的匹配与分割

5)tkinter.StringVar()

 

完整代码

import tkinter
import reclass Mainwindow():#------------在构造方法中创建窗体--------------def __init__(self):#----------定义窗体-----------self.root = tkinter.Tk()self.root.geometry("240x300")self.root.maxsize(300,300)self.root.title("linlianqin计算器")self.input_frame()#显示输入区域self.button_fram()#显示按钮组区域self.root.mainloop()#--------------创建各个部分的区域显示,frame----------------def input_frame(self):#定义数字输入显示区域,实现功能的显示self.inputframe = tkinter.Frame(self.root,width = 20)#文本输入区域创建self.content = tkinter.StringVar()#为了修改#Entry组件是单行输入的文本输入框,而text是多行输入文本框#在文本输入区域进行Entry组件的创建self.entry = tkinter.Entry(self.inputframe,textvariable = self.content ,font = ("微软雅黑",20),fg = "#000000")self.clean = False#用于给输入框清0的标记self.entry.pack(fill = "x",expand = 1)self.inputframe.pack(side = "top")def button_fram(self):#定义数字及运算符按钮区域#创建按钮组件区域self.buttonframe = tkinter.Frame(self.root)self.button_list = [[],[],[],[]]self.button_list[0].append( tkinter.Button(self.buttonframe,width = 3,text = "1",font = ("微软雅黑",20),fg = "#000000"))self.button_list[0].append( tkinter.Button(self.buttonframe,width = 3,text = "2",font = ("微软雅黑",20),fg = "#000000"))self.button_list[0].append( tkinter.Button(self.buttonframe,width = 3,text = "3",font = ("微软雅黑",20),fg = "#000000"))self.button_list[0].append( tkinter.Button(self.buttonframe,width = 3,text = "+",font = ("微软雅黑",20),fg = "#000000"))self.button_list[1].append( tkinter.Button(self.buttonframe,width = 3,text = "4",font = ("微软雅黑",20),fg = "#000000"))self.button_list[1].append( tkinter.Button(self.buttonframe,width = 3,text = "5",font = ("微软雅黑",20),fg = "#000000"))self.button_list[1].append( tkinter.Button(self.buttonframe,width = 3,text = "6",font = ("微软雅黑",20),fg = "#000000"))self.button_list[1].append( tkinter.Button(self.buttonframe,width = 3,text = "-",font = ("微软雅黑",20),fg = "#000000"))self.button_list[2].append( tkinter.Button(self.buttonframe,width = 3,text = "7",font = ("微软雅黑",20),fg = "#000000"))self.button_list[2].append( tkinter.Button(self.buttonframe,width = 3,text = "8",font = ("微软雅黑",20),fg = "#000000"))self.button_list[2].append( tkinter.Button(self.buttonframe,width = 3,text = "9",font = ("微软雅黑",20),fg = "#000000"))self.button_list[2].append( tkinter.Button(self.buttonframe,width = 3,text = "*",font = ("微软雅黑",20),fg = "#000000"))self.button_list[3].append( tkinter.Button(self.buttonframe,width = 3,text = ".",font = ("微软雅黑",20),fg = "#000000"))self.button_list[3].append( tkinter.Button(self.buttonframe,width = 3,text = "0",font = ("微软雅黑",20),fg = "#000000"))self.button_list[3].append( tkinter.Button(self.buttonframe,width = 3,text = "=",font = ("微软雅黑",20),fg = "#000000"))self.button_list[3].append( tkinter.Button(self.buttonframe,width = 3,text = "/",font = ("微软雅黑",20),fg = "#000000"))self.row = 0for button_group in self.button_list:self.column = 0for self.button in button_group:self.button.bind("<Button-1>", lambda event: self.button_handle(event))self.button.grid(row = self.row,column = self.column)self.column += 1self.row += 1self.buttonframe.pack(side = "bottom")#-----------------------定义事件处理的方法----------------------def button_handle(self,event):per = event.widget["text"]#可以获得绑定了该事件的组件上的文本if self.clean:self.content.set("")#清零self.clean = Falseif per != "=":#在文本输入框的末端插入新按下的按键的值self.entry.insert("end",per)elif per == "=":#如果检测到按下的是等号时就进行数学运算exp = self.entry.get()#获得输入框中的数学运算表达式patter = r"\+|\-|\*|\/"#正则表达式nums = re.split(patter,exp)#根据正则表达式分割字符串flag = re.findall(patter,exp)[0]#根据正则表达式来找到相应的符号,必须进行取零操作,因为正则返回一个字符串result = 0if flag == "+":result = float(nums[0]) + float(nums[1])#必须将其规定数字类型,因为分割后得到的是字符串elif flag == "-":result =  float(nums[0]) - float(nums[1])elif flag == "*":result =  float(nums[0]) * float(nums[1])elif flag == "/":result =  float(nums[0]) / float(nums[1])self.entry.insert("end","=%s"%result)self.clean = Truedef main():Mainwindow()if __name__ == '__main__':main()

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记(51):Python实战编程-ListBox

立即学习:https://edu.csdn.net/course/play/19711/343113?utm_sourceblogtoedu listbox 知识点&#xff1a; 1)创建listbox: self.item_listbox tkinter.Listbox(self.root,selectmode "multiple", font("微软雅黑",12),fg "black",bg &…

C++简单工厂模式

核心思想&#xff1a;用一个工厂类根据不同的输入条件new出不同的派生类指针&#xff0c;然后由多态调用不同派生类中virtual函数&#xff0c;得到不同的结果 所有的判断处理在工厂类中完成&#xff0c;通过CreateFactory函数&#xff0c;根据不同的类型&#xff0c;new出派生类…

Linux文本查看命令之touch

touch可以用来创建文件或者修改文件的时间戳如果touch的文件不存在&#xff0c;就创建改文件touch命令可以修改文件的Access time和 Modify time-a 可以仅修改Access time注意&#xff1a;由于Access time的改变&#xff0c;Change time也改变了&#xff0c;但是如果cat该文件&…

使用腾讯开发平台获取QQ用户数据资料

<今天是七夕&#xff1a;祝大家七夕嗨皮&#xff0c;前可么么哒&#xff0c;后可啪啪啪> Tips&#xff1a;本篇博客将教你如何使用腾讯开发平台获取QQ用户资料 ------------------------------------------------------------------------------------------------------…

LINUX REDHAT第十单元文档

1.系统日志默认分类#### /var/log/messages##系统服务及日志&#xff0c;包括服务的信息&#xff0c;报错等等 /var/log/secure##系统认证信息日志 /var/log/maillog##系统邮件服务信息 /var/log/cron##系统定时任务信息 /var/log/boot.log##系统启动信息 2.日志管理服务rsyslo…

Spring4 MVC文件下载实例

这篇文章将向您展示如何使用Spring MVC4执行文件下载&#xff0c;我们将看到应用程序从文件系统内部以及外部文件下载文件。本教程的主要亮点&#xff1a; 下载文件是相当简单的&#xff0c;涉及以下步骤。 创建一个InputStream到文件用于下载。查找MIME类型下载文件的内容。–…

不可不知的:iOS开发的22个诡异技巧

结合自身的实践开发经验总结出了22个iOS开发的小技巧&#xff0c;以非常欢乐的语调轻松解决开发过程中所遇到的各种苦逼难题&#xff0c;光读着便已忍俊不禁。 1. TableView不显示没内容的Cell怎么办&#xff1f; 类似于图1&#xff0c;我不想让下面的那些空显示。很简单&#…

linux删除之前的文件日志

linux下每天都在产生LOG日志文件&#xff0c;如果不定期删除&#xff0c;迟早挤爆硬盘&#xff0c;如果手动删除&#xff0c;几次可以&#xff0c;不是长久之计。这些事交给Linux系统就可以解决。 试验环境&#xff1a; 系统&#xff1a;CentOS 6.5 x64 测试路径、测试文件名、…

线程操作范例

实例要求&#xff1a; 设计一个线程操作类&#xff0c;要求可以产生三个线程对象&#xff0c;并可以分别设置三个线程的休眠时间。如下所示&#xff1a; 问怎么设计&#xff1f; 分析 从之前学习知道&#xff0c;线程的实现有两种方式&#xff0c;一种是继承Thread类&#xff0…

【转】Unity3D研究院之使用Xamarin Studio调试Unity程序

如果你是在windows上开发&#xff0c;就无视这篇文章吧。 为什么要用Xamarin Studio 你可以看看我之前的文章 http://www.xuanyusong.com/archives/2683 unity4.x 和 unity5.x都可以用Xamarin Studio 来调试&#xff0c;亲测&#xff01; 先下载插件&#xff1a;http://files.u…

学习笔记(56):Python实战编程-Menu

立即学习:https://edu.csdn.net/course/play/19711/343119?utm_sourceblogtoedu 1.菜单menu: 1&#xff09;弹出式菜单&#xff0c;类似与电脑桌面右击弹出的菜单成为弹出菜单&#xff1b; 2&#xff09;窗体式菜单&#xff1a;类似于word上面的菜单栏 2.窗体菜单创建的步骤…

SystemCenter2012SP1实践(19)集成WSUS更新服务器2012

今天我们的任务是配置一台WSUS&#xff08;Windows更新服务器&#xff09;&#xff0c;以方便后期通过"基线"与其组合&#xff0c;完成虚拟机的系统补丁升级。WSUS是Windows系统运维自动化的一个重要组成部分&#xff0c;通过它&#xff0c;能够节省我们很多的运维时…

LintCode: 3 Sum

C 把3个数求和&#xff0c;转变为2个数求和 1. 把数组排序 2. 注意过滤重复值 3. 从前到后遍历&#xff0c;游标i 4. 从后边数中找start &#xff0b; end &#xff1d; -arr[i]的2 sum 5. start &#xff0b; end < -arr[i], start 6. start end > -arr[i], end-- 7. s…

最优化课堂笔记03:整数规划

二、整数规划问题的求解方法&#xff1a;&#xff08;重点&#xff1a;分枝定界法&#xff09; 1.割平面法 1&#xff09;基本思想 2&#xff09;求解步骤 2&#xff09;重点&#xff1a;分枝定界法&#xff08;极大化的问题&#xff09;考试不会分很多次枝&#xff0c;用图解…

正整数分解为几个连续自然数之和

题目&#xff1a;输入一个正整数&#xff0c;若该数能用几个连续正整数之和表示&#xff0c;则输出所有可能的正整数序列。 一个正整数有可能可以被表示为n(n>2)个连续正整数之和&#xff0c;如&#xff1a; 1512345 15456 1578 有些数可以写成连续N&#xff08;>1&#…

egret3D与2D混合开发,画布尺寸不一致的问题

egret3d的GUI目前还没有&#xff0c;在做3d游戏的时候没有UI可用&#xff0c;只能使用egret2d的EUI组件库&#xff0c;egret3d与egret2d混合开发&#xff0c;canvas3d的大小与位置与canvas2d并没有重合&#xff0c;导致适配ui时总是错位。在做手机屏幕适配的时候必须解决这种问…

最优化作业讲解01:标准化线性规划(LP)

1.1、错误点&#xff1a;求得了目标函数最优解&#xff0c;但是没有将结果返回去最大值 2.4、错误点&#xff1a;x2变量的处理上&#xff0c;x2不是任意变量不可以按照任意变量来进行变换 x6 x2 5&#xff0c;且x6>0 2.9、 易错点&#xff1a; 1&#xff09;基变量要满足…

React Native 常见问题集合

在使用React Native时候&#xff0c;我记录下比较常遇到的问题&#xff0c;分为以下几类&#xff1a; 1. 调试问题 2. 写法问题 3. 疑难问题 4. 奇怪问题 调试问题 1. 在react-native run-android运行后&#xff0c;真机上打开的空白页面。 我测试机是红米2A&#xff08;Androi…

学习笔记(57):Python实战编程-Treeview

立即学习:https://edu.csdn.net/course/play/19711/343120?utm_sourceblogtoedu 1.树状结构Treeview:分为树状折叠式列表和列表显示&#xff0c;是一种很重要数据列表展示的形式 2.树状列表建立步骤&#xff1a; 1&#xff09;创建一个树状列表&#xff1a;在这里可以设置显示…

验证VSPHERE5 支持大于2TB磁盘

VSPHERE5 使用GTP格式的分区表&#xff0c;文件系统类型为VMFS5.X&#xff0c;直接支持大于2TB的磁盘分区&#xff0c;相对于VSPHERE4不同 vsphere4使用MSDOS格式的分区表&#xff0c;文件系统类型为VMFS3.X 而vsphere5 block块大小统一为1MB&#xff0c;而不是vsphere4的多种格…