Python基于Tkinter的二输入规则器

Python基于Tkinter的二输入规则器 Python 2,7 IDE Pycharm 5,0,3 起因 昨天接触了Tkinter框架

本文包含相关资料包-----> 点击直达获取<-------

Python基于Tkinter的二输入规则器

  • Python 2.7
  • IDE Pycharm 5.0.3

起因

昨天接触了Tkinter框架,之后就迫不及待的想写个计算器出来,结果呢,可想而知了,当初自己犟脾气,掌握几个语法后就想什么都不参考写自己的一段四则运算器出来,结果。。。。。。花了我一天时间,我竟然歪打正着写了个规则器出来窝草。。。。

对比

贴个图,别人家的计算器是这样的;而且用了五十行,说的貌似很了不起的样子(老纸的规则器,只要40-就可以!不算上Scrollbar,分割子框架这类的)

But

我的规则器是这样的。。。。

我知道布局排丑了,不要在意这些细节好么0.0

说说优点

  • 以计算器角度说,能完美实现计算,而且带标号,记录存储等功能,知道上一步计算结果。

  • 最大的优点在于二输入,调用各种def的函数,而四则运算只是最简单的函数而已,比如说我又写了字符串连接函数,相似度比较函数等等,做个实例而已,大家可以大开脑洞

缺点

  • 需要键盘输入,与普通计算器按键输入不同

  • 我的代码冗余量比较大,因为自己需要看懂,所以不像别的教程那样直接跟着lambda和pack,一长串的,不利于我们这种小白读。等我水平再高一些,或许我也会采用lambda,这样才够pythontic~

后续

  • 本身在做分类聚类方面的课题,结合这个规则器,我完全可以把k-means中的k参数在交互界面上输入,这样就不用每次上程序里面改了!还有DBSCAN里面的Eps和MinPts也可以直接用这个框架!!想想有点小激动呢!(挖的坑不计其数)

  • 需要优化下布局,尝试用grid来做,感觉pack里面参数略多啊。

构思框架

放代码之前,先来设计思路,我设计了两个框架,输入和输出在两个框架上,这样便于写代码思路清晰,框架大概是这样的;

代码

此代码(就算再烂)绝此一家,别无分店哈哈

```python

-------------------二输入规则计算器--------------------

- - coding: utf-8 - -

from Tkinter import * import difflib

主框架部分

root = Tk() root.title('乞丐版规则器0.0') root.geometry() Label_root=Label(root,text='规则运算(根框架)',font=('宋体',15))

-----------------------定义规则------------------------

def Plus(a,b): return round(a+b, 2)

def Sub(a,b): return round(a-b,2)

def Mult(a,b): return round(a*b, 2)

def Div(a,b): return round(a/b, 2)

def P_str(a,b): return a+b

def Rep(a,b): return difflib.SequenceMatcher(None,a,b).ratio() #difflib可以看看其中的定义,计算匹配率的

还可以继续增加规则函数,只要是两输入的参数都可以

----------------------触发函数-----------------------

def Answ():#规则函数

if lb.get(lb.curselection()).encode('utf-8') == '加':
    Ans.insert(END,'规则:+ ->'+str(Plus(float(var_first.get()),float(var_second.get()))))
if lb.get(lb.curselection()).encode('utf-8')=='减':
    Ans.insert(END,'规则:- ->'+str(Sub(float(var_first.get()),float(var_second.get()))))
if lb.get(lb.curselection()).encode('utf-8')=='乘':
    Ans.insert(END,'规则:x ->'+str(Mult(float(var_first.get()),float(var_second.get()))))
if lb.get(lb.curselection()).encode('utf-8')=='除':
    Ans.insert(END,'规则:/ ->'+str(Div(float(var_first.get()),float(var_second.get()))))
if lb.get(lb.curselection()).encode('utf-8')=='字符串连接':
    Ans.insert(END,'规则:字符串连接 ->' +P_str(var_first.get(),var_second.get()).encode('utf-8'))
if lb.get(lb.curselection()).encode('utf-8')=='字符串相似度':
    Ans.insert(END,'规则:字符串相似度 ->'+str(Rep(var_first.get(),var_second.get())))

#添加规则后定义规则函数

def Clea():#清空函数 input_num_first.delete(0,END)#这里entry的delect用0 input_num_second.delete(0,END) Ans.delete(0,END)#text中的用0.0

----------------------输入选择框架--------------------

frame_input = Frame(root) Label_input=Label(frame_input, text='(输入和选择框架)', font=('',15)) var_first = StringVar() var_second = StringVar() input_num_first = Entry(frame_input, textvariable=var_first) input_num_second = Entry(frame_input, textvariable=var_second)

---------------------选择运算规则---------------------

还可以添加其他规则

lb = Listbox(frame_input,height=4) list_item=['加', '减', '乘', '除','字符串连接','字符串相似度'] for i in list_item: lb.insert(END,i)

---------------------计算结果框架---------------------

frame_output = Frame(root) Label_output=Label(frame_output, text='(计算结果框架)', font=('',15)) Ans = Listbox(frame_output, height=5,width=30)#text也可以,Listbox好处在于换行

-----------------------Button-----------------------

calc = Button(frame_output,text='计算', command=Answ) cle = Button(frame_output,text='清除', command=Clea)

---------------------滑动Scrollbar-------------------

scr1 = Scrollbar(frame_input) lb.configure(yscrollcommand = scr1.set) scr1['command']=lb.yview

scr2 = Scrollbar(frame_output) Ans.configure(yscrollcommand = scr2.set) scr2['command']=Ans.yview

-------------------------布局------------------------

布局写在一块容易排版,可能我low了吧

Label_root.pack(side=TOP) frame_input.pack(side=TOP) Label_input.pack(side=LEFT)

input_num_first.pack(side=LEFT) lb.pack(side=LEFT) scr1.pack(side=LEFT,fill=Y) input_num_second.pack(side=RIGHT)

frame_output.pack(side=TOP) Label_output.pack(side=LEFT) calc.pack(side=LEFT) cle.pack(side=LEFT) Ans.pack(side=LEFT) scr2.pack(side=LEFT,fill=Y)

-------------------root.mainloop()------------------

root.mainloop() ```

Tkinter还是比较好上手的,知道一些基本语法就可以实现自己想要的效果了,这里我把自己遇到的问题写一下,如果也有人遇到,恰好能帮助的话,我很荣幸。

问题&解决

Q.button或插件不显示 A.记得加上pack显示函数!!一般我都定义完了插件直接补上 pack函数

Q.插件位置显示问题 A.这个要看你的pack函数写在哪了,所以我一般直接写在最后,容易排序,比如side都是LEFT的话,就按先后顺序显示的

Q.刚开始键入的被get之后,直接运算出错。 A.结果是str类型,所以记得用float强制转换,不用int是因为int做除法时候不好使,需要float,切记(python2.7)

Pay Attention

  • 在自定义规则的时候,主要get抓到的数据类型和你的def里面的数据类型,保持一致。

  • 清空函数中,text和entry,listbox的delect清空不一样!比如被实例的是Listbox(Entry)的,那么清空是Obj.delect(0,END),而如果是Text的对象,那么就是Obj.delect(0.0,END),这个是我之前没想到的,只有实践过才记得住把。而且,用listbox好处在于计算一个值之后,下一个值自动换行,用text时候\n还不好使

  • 如果使用python3,会出现,no model name Tkinter,其实py3只是把它改成小写了,所以导入包的时候改成tkinter 小写就行

  • 出现点击运算符之后无法输出结果或者gui中文乱码问题,一般也是出现在python3的问题上,所以解决方案是吧encode('utf-8')删掉就可以了。

参考文献

  • 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪)
  • 基于轻量级J2EE的网络游戏虚拟物品交易系统的设计与实现(北京邮电大学·曹鹃)
  • 二进制密码算法识别系统的设计与实现(北京邮电大学·边瑜)
  • 基于MVC模式的Struts框架的研究与应用(武汉理工大学·戴翔宇)
  • 利用J2EE构建中小型电子商城的研究(北京交通大学·张峤)
  • 数据挖掘在国联安金融数据综合管理平台及风险控制系统中的应用(吉林大学·王翼)
  • 基于ROR框架研究与应用(武汉理工大学·刘耿)
  • 基于MVC模式的Struts框架的研究与应用(武汉理工大学·戴翔宇)
  • 基于本体的构件描述以及Jena框架下构件库的设计和实现(吉林大学·黄怡)
  • 基于J2EE平台的电子金融系统研究与实现(兰州理工大学·何志荣)
  • 基于ROR框架研究与应用(武汉理工大学·刘耿)
  • 基于MVC模式的STRUTS框架在网上购书系统中的应用(天津大学·曹蕴)
  • 基于J2EE平台的工作流管理系统的运行引擎和客户端及管理工具的设计与实现(西北大学·门浩)
  • 规则引擎在钢铁生产调度系统中的应用研究(冶金自动化研究设计院·耿志强)
  • 基于J2EE的企业级应用系统的开发与研究(江南大学·张景莉)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设助手 ,原文地址:https://bishedaima.com/yuanma/35543.html

相关推荐

  • 基于Web技术实现多人博客平台

    一,需求分析 博客是网络交流的一种重要形式,国内拥有许多专业的博客平台,如 CSDN 等, 为了实现小规模用户之间文章的分享,多人之间的交流互动,熟悉博客平台的开发流程
    2024年05月14日
    2 1 1
  • 基于Jsp和Servlet实现的图书管理系统

    基于JSP和MySQL实现的图书管理系统 一,采用的工具与技术总览 前端页面设计涉及技术 :html5+css3 后端开发设计技术 :jsp+servlet+javaBean+jdbc+dao 模板引擎 :jsp(el与jstl) 服务器与java版本 :Tomcat8
    2024年05月14日
    6 1 1
  • 基于SpringBoot框架的医院后台管理系统

    这是一套采用Java编程语言,基于SpringBoot框架构建的医院后台管理系统的源代码,该项目融入了Vue技术,开发工具为Idea或Eclipse,此医院信息管理系统适用于毕业设计或课程实践项目
    2024年05月23日
    16 1 4
  • 基于SpringBoot框架的公交线路查询系统

    这是一套采用Java语言编写的公交线路查询系统源代码,其构建于流行的SpringBoot框架之上,并结合了Vue技术,开发工具选择的是Idea或Eclipse,此项目可作为一个理想的毕业设计或课程设计任务
    2024年05月23日
    8 1 2
  • 基于SpringBoot框架的餐饮管理系统

    这是一项利用Java语言构建的🔥🔥SpringBoot驱动的餐饮管理系统的源代码实现🔥🔥,该项目采用了SpringBoot框架结合Vue技术进行开发,并且支持Idea或Eclipse作为集成开发环境
    2024年05月23日
    5 1 2
  • 基于CNN的猫狗识别 web 应用

    Cat Vs Dog 数据集百度云链接: https://pan,baidu,com/s/1qsvmq3uwqr79ykI5FblV8g 提取码:yun5 训练好的模型百度云链接: https://pan
    2024年05月14日
    2 1 1
  • 基于SSM框架的个人博客系统(源码+论文)

    这是一个🔥🔥基于SSM框架的个人博客系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 个人博客系统开发技术栈为SSM项目,可以作为毕业设计课程设计作业使用spring+springmvc+mybatis实现一个个人博客系统
    2024年05月23日
    6 1 2
  • 大学城水电管理系统

    这是一个🔥🔥基于SpringBoot框架的大学城水电管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    3 1 1
  • Java药品进销存管理系统

    这是一个🔥🔥JavaWeb药品进销存管理系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 药品管理系统开发技术栈为SSH项目,可以作为毕业设计课程设计作业基于JavaWeb实现一个药品进销存管理系统
    2024年05月23日
    11 1 3
  • 基于Java Swing实现的简易考试系统界面搭建

    基于Java Swing实现的简易考试系统界面搭建 一,任务介绍 1,1 任务描述 本任务要搭建一个考试系统界面,考试题型主要有两类:判断题和单选题
    2024年05月14日
    2 1 1

发表回复

登录后才能评论