Python Tkinter真实的例子

不管常规方法如何,我们先尝试一个轻巧并且很实用的小例子。它会让你体会到在Tk程序背后看起来的最初感觉。

设计
我们要是用的例子是一个简单的GUI工具,用来将一个单位为英尺的数字转换为与其相等的米制单位数字。如果我们将其简单的描绘出来,应该看起来如下:
Tkinter教程3——一个例子(真实的)程序 - Andy - Andy
 看起来我们需要一个短小的文本输入部件,可以让我们输入一个英尺单位的数字,同时还有一个‘Calculate’按钮,用它获取输入的英尺数字,执行计算,然后把计算后的米制数字结果放在位于输入文本框下面的位置。当然,我们还需要三个静态的标签(”Feet “,“is equivalent to”和"Meters")帮助我们指出如何使用界面。
Tkinter教程3——一个例子(真实的)程序 - Andy - Andy
 下面是创建该程序的Python代码:

from tkinter import *
from tkinter import ttk

def calculate(*args):
    try:
        value = float(feet.get())
        meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
    except ValueError:
        pass
    
root = Tk()
root.title("Feet to Meters")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

feet = StringVar()
meters = StringVar()

feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)
feet_entry.grid(column=2, row=1, sticky=(W, E))

ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)

ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

feet_entry.focus()
root.bind('<Return>', calculate)

root.mainloop()

最终的用户界面:
Tkinter教程3——一个例子(真实的)程序 - Andy - Andy

代码风格上的提示:
每一种语言,包括这部教程里的,都有多种可供选择编写风格与习惯约定,帮助我们决定如何使用变量和函数命名,过程、函数化或面向对象风格等等。
由于这本教程关注的是Tk,在这里将尽可能简单,一般会使用非常直接的代码风格,而不是专注于我们的代码在过程、模块、对象、类等方面。可能多的是,你将会看到在很多例子里会有相同的对象名、变量名等。

逐步解说
from tkinter import *
from tkinter import ttk
这两行告诉Python我们的程序需要两个模块。第一个,'tkinter',是一个绑定Tk的标准模块,当它被加载时就会让你的系统中存在的Tk库被载入。第二个,“ttk”,是Python与Tk8.5版本中新增部件的绑定。(按钮,文本框之类的都叫做部件)
提示:需要注意的是,我们已经从tkinter模块中导入了全部,所以我们能调用tkinter函数,而不需要前缀,前缀是标准调用方式。尽管如此,由于我们只导入了ttk本身,也就是说我们需要在调用ttk内部函数的时候添加前缀。比如,调用‘Entry(...)’函数,将引用tkinter模块你的函数,而只有用'ttk.Entry(...)'才能引用ttk模块内函数。正如你将要看到的,有些函数在这两个模块里都被定义了,并且有些时候你可能两者都需要。依据内容的不同,在这里使用ttk调用设备,并且在教程中使用该风格。
更新:如果你正在从老版本代码迁移到新版本代码,你会发现一件事情,就是Tkinter模块的名字都变为小写了。例如,“tkinter”而不再是"Tkinter",这是从Python3.0开始改变的。

root = Tk()
root.title("Feet to Meters")
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
     仅供参考:是的,“Calculate”函数出现在之前。我们将在后面进行描述,但是程序里在靠近开始的时候要包括它,因为其他程序需要引用。
以上几行代码建立了主窗口,给定名称为“Feet to Meters”。紧接着,创建了一个框架部件,用来控制我们用户界面上所有控件,并把它们放在主窗口上。“columnconfigure”/“rowconfigure”仅仅是告诉Tk,如果主窗口改变大小,框架应该扩展到其余空间。
仅供参考:严格的说,我们可以将界面其他部分直接放如主窗口中,而不需要框架的干预。尽管如此,主窗口其本身并非是“方案”部件的一部分,所以它的背景色并不能与我们将要放入其中的方案部件相匹配,使用一个“方案”框架部件来控制内容,保证背景色的正确。

feet = StringVar()
meters = StringVar()
feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)
feet_entry.grid(column=2, row=1, sticky=(W, E))
ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)
以上代码创建了我们程序的主要三个控件:一个用于输入英尺数字的输入框,一个放置米制结果数字的label标签,以及一个执行计算从操作的按钮。
对于这三个控件的每一个来说,我们需要做两件事情:创建控件本身,和将它们放入界面中。我们创建的内容窗口是作为Tk方案部件类的实例,这三个控件是这个实例的“孩子”,(这里应该翻译为子类)。在创建它们的同时,我们给定它们确定的选项。例如,输入框的宽度,按钮上的文本等等。输入框和标签都被拾取为一个神奇的“textvariable(文本变量)”,一会儿我们将看到是怎么做的。
如果这些控件被创建,它们不会自动显示在界面上,因为Tk不知道相对于其他控件,你想把它们如何放置。这就是“grid”部分做的事情。记住我们应用程序的布局网格,我们放置控件在不同的列(1,2或者3)和行(1、2和3)。“sticky”选项说明了通过使用罗盘是方位,控件将要如何在网格单元里排放,例如“w”(west)意思是定位控件到单元格的左边,“we”(west-east)意思是定位控件从左边到右边(相当于控件从左到右占满)等等。

ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)
上面三行代码对我们界面中的三个静态文本标签控件准确的做了相同的事情:创建了它们,并放置在界面上合适的网格位置上。

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
feet_entry.focus()
root.bind('<Return>', calculate)
上面三行代码让我们的界面看起来更友好。
第一行,检查框架内的所有子控件,并且在每个控件周围添加一小点距离,所以它们看起来没那么拥挤。当我们第一次放置控件到界面上时,我们可以添加这些选项到每一个"grid"调用,但这仅仅是一种漂亮的快捷方式。
第二行,告诉Tk把注意力转移到我们的输入框上,也就是说,在开始的时候,光标会默认在输入框区域内,所以用户在输入的时候,不需要先单击它。
第三行,告诉Tk如果用户按下了回车键,就会调用计算程序段,作用和点击计算按钮时一样。

def calculate(*args):
    try:
        value = float(feet.get())
        meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
    except ValueError:
        pass
这里我们定义计算程序,当用户点击计算按钮或者按下回车键的时候会被调用。它执行从英尺到米的换算,从输入框中获取输入的英尺数字,并把结果放在标签控件中。
说什么?它看起来不像是我们用这些控件做了什么事。这就是我们在创建控件时定义的神奇的“textvariable”选项起的作用。我们为输入框定义了全局变量“feet”作为textvariable,也就是说,无论什么时候输入发生改变,Tk将自动更新全局变量“feet”。同理,如果我们明确改变一个与控件相关的textvariable的值(就像我们对链接到标签控件的“Meters”所做的那样),该控件将自动被当前变量的内容更新。很灵活。

root.mainloop()
这最后一行告诉Tk让它的事件循环,这样才能让所有的事情运行。

忘记了什么?
这里还有一些值得检查而我们没有在Tk程序中包括的。例如:
·我们没有考虑当事件改变时重绘界面
·我们没有考虑评价发送事件消息,捕获监测,或者在每个空间上处理事件
·在创建控件的时候,我们没有提供更多的选项;默认看起来已经关注了很多事情,并且我们仅仅改变了按钮上的显示文本。
·我们没有写复杂的代码来获取和设定简单控件的值,我们仅仅把它们链接到变量
·我们没有考虑当用户关闭窗口或者改变窗口大小后会发生什么
·我们没有写额外的代码让它能够跨平台工作
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: TkinterPython中内置的图形用户界面(GUI)库。以下是一些常用的Tkinter例子: 1. 创建窗口: ```python import tkinter as tk root = tk.Tk() root.mainloop() ``` 2. 创建按钮: ```python import tkinter as tk def on_button_click(): print("Button clicked!") root = tk.Tk() button = tk.Button(root, text="Click me", command=on_button_click) button.pack() root.mainloop() ``` 3. 创建标签: ```python import tkinter as tk root = tk.Tk() label = tk.Label(root, text="Hello, Tkinter!") label.pack() root.mainloop() ``` 4. 创建文本框: ```python import tkinter as tk root = tk.Tk() entry = tk.Entry(root) entry.pack() root.mainloop() ``` 5. 使用布局管理器: ```python import tkinter as tk root = tk.Tk() button1 = tk.Button(root, text="Button 1") button2 = tk.Button(root, text="Button 2") button3 = tk.Button(root, text="Button 3") button1.grid(row=0, column=0) button2.grid(row=1, column=1) button3.grid(row=2, column=2) root.mainloop() ``` 这些只是Tkinter的一些基本用法,更多细节可以参考官方文档。 ### 回答2: PythonTKINTERPython的标准GUI(图形用户界面)库之一,提供了创建窗口、绘制图形、展示文本、处理用户输入等功能。以下是一些常用的TKINTER例子: 1. 创建窗口:用于创建一个基本的空白窗口,可以设置窗口的标题、大小和位置等属性。 2. 绘制图形:可以使用TKINTER的绘图函数来创建各种图形,如线段、矩形、椭圆、多边形等。 3. 按钮:创建一个按钮,用于触发特定的操作或函数,可以自定义按钮的样式和事件响应。 4. 文本框:创建一个文本框,用于接收用户输入文本或显示指定的内容。 5. 标签:创建一个标签,用于显示文本或图像,可以设置标签的字体、颜色和位置等属性。 6. 列表框:创建一个列表框,用于显示多个选项供用户选择,可以设置列表项的样式和功能。 7. 菜单栏:创建一个菜单栏,用于显示一系列选项和子菜单,可以响应菜单选项的点击事件。 8. 弹出对话框:用于显示消息、提示、警告等不同类型的对话框,如消息框、输入框、文件选择对话框等。 9. 滚动条:创建一个滚动条,用于在窗口中滚动显示文本或图像等内容。 10. 进度条:显示一个进度条,用于表示任务的进度或加载状态。 这些是TKINTER的一些常用例子,通过它们可以实现各种基本的GUI功能。我们可以利用这些例子PythonTKINTER开发更加复杂的GUI应用程序。 ### 回答3: PythonTKINTER是用来创建图形用户界面的库,下面是几个常用的例子: 1. 简单的窗口:可以使用TKINTER创建一个简单的窗口,使用root = Tk()创建主窗口对象,然后使用root.mainloop()来显示窗口。 2. 按钮和标签:可以使用Button和Label来创建按钮和标签,例如Button(root, text="点击我")和Label(root, text="这是一个标签")。 3. 输入框:可以使用Entry来创建一个输入框,例如entry = Entry(root)。可以使用entry.get()来获取输入框中的值。 4. 消息框:可以使用messagebox来创建消息框,例如messagebox.showinfo("提示", "这是一个消息框")。 5. 列表框:可以使用Listbox来创建一个列表框,例如listbox = Listbox(root)。可以使用listbox.insert(END, "项1")向列表框中插入项。 6. 菜单栏:可以使用Menu来创建菜单栏,例如menubar = Menu(root)。可以使用menubar.add_command(label="菜单项")添加菜单项。 7. 图片显示:可以使用Canvas来显示图片,例如canvas = Canvas(root, width=300, height=300),然后使用canvas.create_image(0, 0, anchor=NW, image=image)来显示图片。 8. 布局管理:TKINTER提供了多种布局管理器,例如pack、grid和place,可以使用这些布局管理器来灵活地安排窗口中的组件。 这些只是一些常见的例子TKINTER还提供了许多其他功能,可以根据具体需求进行深入学习和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值