博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tkinter的GUI设计:界面与逻辑分离(一)-- 初次见面
阅读量:6720 次
发布时间:2019-06-25

本文共 2665 字,大约阅读时间需要 8 分钟。

PyQt实现界面与逻辑分离的设计很是方便,详情可以见我的第一篇博文。

 

不过本文将使用python的标准库 tkinter,来实现界面与逻辑分离的GUI 设计。

 

我们来设计一个很简单的程序:

  目的:长度单位英尺(feet)到米(meter)的转化

  实现:输入框输入英尺(feet),标签显示对应的长度米(meter)。可以点击按钮,亦可按回车键。

  说明:界面使用了 ttk.Frame 容器,各个部件的定位皆使用了 grid() 方法,3行3列

                   

  效果:如下

                       

  代码: 眼力好的你一定会发现,下面的代码风格有点像PyQt:

import tkinter as tkfrom tkinter import ttkclass Application(tk.Tk): # 继承自 tk.Tk    '''界面、逻辑分离示例'''        def __init__(self):        '''初始化'''        super().__init__() # 有点相当于tk.Tk()                self.createWidgets()    def createWidgets(self):        '''界面'''        self.mainframe = ttk.Frame(self, padding="3 3 12 12") # 注意ttk.Frame()的第一个参数为self,因为这个类继承自tk.Tk类        self.mainframe.grid(column=0, row=0, sticky=(tk.N, tk.W, tk.E, tk.S))        self.mainframe.columnconfigure(0, weight=1)        self.mainframe.rowconfigure(0, weight=1)        # 定义了两个变量(下面会将它们绑定到输入部件 Entry 和标签部件 Label 上)        # self.feet = StringVar()        self.feet = tk.DoubleVar()        self.meters = tk.StringVar()        # 定义Entry部件,并把它赋给一个变量,方便在别处引用它。        self.feet_entry = ttk.Entry(self.mainframe, width=7, textvariable=self.feet)        self.feet_entry.grid(row=1, column=2, sticky=(tk.W, tk.E))        self.feet_entry.focus()        # 定义Label部件        ttk.Label(self.mainframe, textvariable=self.meters).grid(row=2, column=2, sticky=(tk.W, tk.E))                # 定义Button部件        ttk.Button(self.mainframe, text="Calculate", command=self.calculate).grid(row=3, column=3, sticky=tk.W)        # 定义三个Label部件        ttk.Label(self.mainframe, text="feet").grid(row=1, column=3, sticky=tk.W)        ttk.Label(self.mainframe, text="is equivalent to").grid(row=2, column=1, sticky=tk.E)        ttk.Label(self.mainframe, text="meters").grid(row=2, column=3, sticky=tk.W)                # 设置每格的 padding        for child in self.mainframe.winfo_children():             child.grid_configure(padx=5, pady=5)                            # 给窗口绑定回车键事件        self.bind('
', self.calculate) def calculate(self, *args): # 注意:参数必须是带!星!号!的 *args. 否则无论如何都会报类型错误:TypeError '''逻辑''' try: #value = float(self.feet.get()) # 如果前面定义为stringVar: self.feet = StringVar() value = self.feet.get() self.meters.set('{:.4f}'.format((0.3048 * value * 10000.0 + 0.5)/10000.0)) except ValueError: passif __name__ == '__maint__': # 实例化Application app = Application() # 设置窗口标题 app.title("Feet to Meters") # 主消息循环: app.mainloop()

 

 

参考:

http://www.360doc.com/content/14/0328/02/9482_364311622.shtml

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868326118089581a091a04e4c30b2b7896392bdde5c000

转载地址:http://mejmo.baihongyu.com/

你可能感兴趣的文章
一文搞定Java并发编程面试考点
查看>>
linux:arp命令
查看>>
Oracle中TO_DATE格式
查看>>
基于Python的掌上游戏机 μGame
查看>>
Linux /proc 虚拟文件系统使用
查看>>
我的友情链接
查看>>
sersync 和 rsync 的安装测试
查看>>
neo4j配置文件注意项
查看>>
我的友情链接
查看>>
git 使用精华(1)
查看>>
游戏开发的成功秘诀
查看>>
网络 使用select编写服务器
查看>>
Timeout error occurred trying to start MySQL Daemon 解决办法:
查看>>
不会沟通,金子也未必会发光
查看>>
MongoDB整合Spring
查看>>
LAP + MySQL
查看>>
WebServices
查看>>
启动 Impala (翻译)
查看>>
MyEclipse手动配置SSH框架
查看>>
svn代码版本管理
查看>>