赞
踩
Tkinter
tkinter
为核心进行讲解。wxPython
wxPython
是比较流行的GUI 库,适合大型应用程序开发,功能强于tkinter
,整体设计框架类似于MFC(Microsoft Foundation Classes 微软基础类库)。PyQT
tkinter 官方网址:
https://docs.python.org/3.7/library/tk.html 或者:http://effbot.org/tkinterbook/
基于tkinter 模块创建GUI 程序包含如下4 个核心步骤:
from tkinter import *
root = Tk()
btn01 = Button(root)
btn01["text"] = "点我就送花"
btn01.pack()
def songhua(e):
messagebox.showinfo("Message","送你一朵玫瑰花,请你爱上我")
print("送你99 朵玫瑰花")
btn01.bind("<Button-1>",songhua)
示例
from tkinter import * from tkinter import messagebox root = Tk() btn01 = Button(root) btn01["text"]="点击就送花" btn01.pack() def songhua(e): messagebox.showinfo("Message","送你一朵小红花") print("送你99朵玫瑰花") btn01.bind("<Button-1>",songhua) root.mainloop()
通过geometry(‘wxh±x±y’)
进行设置。w
为宽度,h
为高度。+x
表示距屏幕左边的距离;-x
表示距屏幕右边的距离;+y
表示距屏幕上边的距离;-y
表示距屏幕下边的距离。
from tkinter import *
root = Tk()
root.title("测试主窗口的位置和大小")
root.geometry("500x400+100+200") #宽度500,高度400;距屏幕左边100,距屏幕上边200
root.mainloop()
图形用户界面是由一个个组件组成,就像小孩“搭积木”一样最终组成了整个界面。有的组件还能在里面再放置其他组件,我们称为“容器”。Tkinter 的GUI 组件关系图如下:
根据上图所示,讲解这些类的基本作用。
Misc 和Wm、Tk
:Tkinter 的GUI 组件有两个根父类,它们都直接继承了object 类:
·Misc
:它是所有组件的根父类。
·Wm
:它主要提供了一些与窗口管理器通信的功能函数。
·Tk
是由Misc 和Wm 派生出的子类,它代表应用程序的主窗口。一般应用程序都需要直接或间接
使用Tk。
Pack、Place、Grid
是布局管理器。布局管理器管理组件的:大小、位置。通过布局管理器可以将容器中的组件实现合理的排布。
*BaseWidget*
是所有组件的父类。Widget
是所有组件类的父类。Widget
一共有四个父类:BaseWidget、Pack、Grid、Place
。意味着,所有GUI 组件同时具备这四个父类的属性和方法。
Tkinter | 类名称 | 简介 |
---|---|---|
Toplevel | 顶层 | 容器类,可用于为其他组件提供单独的容器;Toplevel 有点类似于窗口 |
Button | 按钮 | 代表按钮组件 |
Canvas | 画布 | 提供绘图功能,包括直线、矩形、椭圆、多边形、位图等 |
Checkbutton | 复选框 | 可供用户勾选的复选框 |
Entry | 单行输入框 | 用户可输入内容 |
Frame | 容器 | 用于装载其它GUI 组件 |
Label | 标签 | 用于显示不可编辑的文本或图标 |
LabelFrame | 容器 | 也是容器组件,类似于Frame,但它支持添加标题 |
Listbox | 列表 | 框列出多个选项,供用户选择 |
Menu | 菜单 | 菜单组件 |
Menubutton | 菜单按钮 | 用来包含菜单的按钮(包括下拉式、层叠式等) |
OptionMenu | 菜单按钮 | Menubutton 的子类,也代表菜单按钮,可通过按钮打开一个菜单 |
Message | 消息框 | 类似于标签,但可以显示多行文本;后来当Label 也能显示多行文本之后,该组件基本处于废弃状态 |
PanedWindow | 分区窗口 | 该容器会被划分成多个区域,每添加一个组件占一个区域,用户可通过拖动分隔线来改变各区域的大小 |
Radiobutton | 单选钮 | 可供用户点边的单选钮 |
Scale | 滑动条 | 拖动滑块可设定起始值和结束值,可显示当前位置的精确值 |
Spinbox | 微调选择器 | 用户可通过该组件的向上、向下箭头选择不同的值 |
Scrollbar | 滚动条 | 用于为组件(文本域、画布、列表框、文本框)提供滚动功能Text 多行文本框显示多行文本 |
本节程序也是GUI 应用程序编写的一个主要结构,采用了面向对象的方式,更加合理的组织代码。通过类Application
组织整个GUI 程序,类Application
继承了Frame
及通过继承拥有了父类的特性。通过构造函数__init__()
初始化窗口中的对象,通过createWidgets()
方法创建窗口中的对象。Frame
框架是一个tkinter 组件,表示一个矩形的区域。Frame
一般作为容器使用,可以放置其他组件,从而实现复杂的布局。
"""测试一个经典的GUI 程序的写法,使用面向对象的方式""" from tkinter import * from tkinter import messagebox class Application(Frame): """一个经典的GUI 程序的类的写法""" def __init__(self, master=None): super().__init__(master) # super()代表的是父类的定义,而不是父类对象 self.master = master self.pack() self.createWidget() def createWidget(self): """创建组件""" self.btn01 = Button(self) self.btn01["text"] = "点击送花" self.btn01.pack() self.btn01["command"] = self.songhua # 创建一个退出按钮 self.btnQuit = Button(self, text="退出", command=root.destroy) self.btnQuit.pack() def songhua(self): messagebox.showinfo("送花","送你99 朵玫瑰花") if __name__ == '__main__': root = Tk() root.geometry("400x100+200+300") root.title("一个经典的GUI 程序类的测试") app = Application(master=root) root.mainloop()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。