暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python+GUI

原创 flyinsky323 2023-07-27
104

创建和执行GUI程序,有5步
1.导入Tkinter模块
2.创建一个顶层窗口
3.在顶层窗口的基础上构建所需要的GUI模块和功能
4.将每一个模块与底层程序代码关联起来
5.执行主循环

导入Tkinter模块的两种方法

方法一:import tkinter as tk
使用时就用 tk.Button的形式
减小了初始化的时候的系统开销;需要使用tk.显式引入,编写起来不够简洁方便

方法二:from tkinter import *
将所有组件一次性引入,之后的代码便可以直接使用各个组件了。(推荐使用该写法)

创建一个顶层窗口
from tkinter import *
root = Tk()
root.title('顶层窗口') #给窗口自定义名称,默认为显示tk
root.mainloop() #进入主循环,否则运行时将一闪而过看不到界面
运行:创建一个空白窗口,只有窗口名称

显示标签
from tkinter import *
root = Tk()
root.title('显示标签') #给窗口自定义名称,默认为显示tk
label = Label(root,text='Hello') #定义标签
label.pack() #调用pack方法
label2 = Label(root,text='World') #定义标签
label2.pack() #调用pack方法
##########
pack方法:默认先使用的放到上面,依次向下排
可接受的参数:
side:按钮停靠在窗口的哪个位置
left:左 right:右 top:上 bottom:下
fill:填充
x:水平方向填充
y:竖起方向填充
both:水平和竖起方向填充
none:不填充
expand:是否扩展整个空白区
yes:扩展整个空白区
no:不扩展
anchor:
N:北 上
E:东 右
S:南 下
W:西 左
CENTER:中间
padx:x方向的外边距
pady:y方向的外边距
ipadx:x方向的内边距
ipady:y方向的内边距
##########
root.mainloop() #进入主循环,否则运行时将一闪而过看不到界面
运行:创建一个标题为test的窗口,显示两行字符hello、world

框架Frame
框架只是一个容器,没有方法,但它可以捕获键盘和鼠标的事件来进行回调。
框架一般用作包含一组控件的主体,并且可以定制外观。
例:
from tkinter import *
root = Tk()
root.title("Frame")
for relief in [RAISED,SUNKEN,FLAT,RIDGE,GROOVE,SOLID]:
f = Frame(root,borderwidth=2,relief=relief) #定义框架
#定义标签,并且使用side参数设定排列方式
Label(f,text=relief,width=10).pack(side=LEFT)
#显示框架,并设定向左排列,x和y轴的宽度均为5个像素
f.pack(side=LEFT,padx=5,pady=5)
root.mainloop()
运行:
RAISED,SUNKEN,FLAT,RIDGE,GROOVE,SOLID
突起,凹陷,无效果,突出边框,凹陷边框,粗黑线

按钮
可以捕获键盘和鼠标事件,并且做出相关反应的标签
按钮可以禁用,禁用后的按钮不能进行单击等任何操作
例:
Button(root,text="禁用",state="DISABLED").pack(side=LEFT)
Button(root,text="取消").pack(side=LEFT)
Button(root,text="确定").pack(side=LEFT)
Button(root,text="退出",command=root.quit).pack(side=RIGHT)

输入框
输入框(Entry)组件是用来接收用户输入的最基本的组件
可以为其设置默认值,也可以禁止用户输入

f=Frame(root) #定义框架
Label(f,text="标准输入框:").pack(side=LEFT,padx=5,pady=10)
e=StringVar() #定义输入框内容
Entry(f,width=50,textvariable=e[,state=DISABLED]).pack(side=LEFT) #基本的输入框[禁用]
e.set('输入框默认内容') #设置一般输入框内容
f.pack()

单选按钮
foo=IntVar() #定义变量
for text,value in [('red',1),('green',2),('black',3),('blue',4)]:
r = Radiobutton(root,text=text,value=value,variable=foo)
r.pack(anchor=W)
foo.set(2) #设置默认选项

复选框
lists=[('red',1),('green',2),('black',3),('blue',4)]
for text,value in lists:
foo=IntVar()
c = Checkbutton(root,text=text,variable=foo)
c.pack(anchor=W)
root.mainloop()
设置复选框是否可用 NORMAL 正常状态,DISABLED 禁用状态
lists=[('red',1,NORMAL),('green',2,NORMAL),('black',3,DISABLED),('blue',4,DISABLED)]
for text,value,status in lists:
foo=IntVar()
c = Checkbutton(root,text=text,variable=foo,state=status)
c.pack(anchor=W)
root.mainloop()

滚动条
l=Listbox(root,height=6,width=15) #设定一个列表组件
scroll=Scrollbar(root,command=l.yview) #定义滚动条,并绑定一个回调
l.configure(yscrollcommand=scroll.set)
l.pack(side=LEFT)
scroll.pack(side=RIGHT,fill=Y)
for item in range(20):
l.insert(END,item)
root.mainloop()

列表框
l=Listbox(root,width=15)
l.pack()
for item in ['apple','orange','peach','banana']:
l.insert(END,item)
root.mainloop()

复杂一些的
from tkinter import *
class App:
def __init__(self,master):
frame = Frame(master)
frame.pack()
self.hello = Button(frame,text='Hello',fg='green',command=self.hello) #fg字体颜色
self.hello.pack(side=LEFT)
self.quit = Button(frame,text='Quit',fg='red',command=frame.quit)

def hello(self):
print('Hello,welcome to the world of python')

root = Tk()
root.wm_title('Python')
root.wm_minsize(200,200)
app = App(root)
root.mainloop()
运行:弹出一个200*200的窗口,点击hello 会打印一串字符,点击quit会关闭窗口

组件 功能
Button 按钮,类似标签,但提供额外的功能,如鼠标掠过、按下、释放以及键盘操作事件
Canvas 画布,提供绘图功能(直线、椭圆、多边形,矩形),可以包含图形或位图
Checkbutton 选择按钮。一组方框,可以选择其中的任意个
Radiobutton 单选按钮。一组按钮,其中只有一个可被“按下”
Entry 文本框。单行文字域,用来收集键盘输入
Frame 框架。包含其它组件的纯容器
Label 标签,用来显示文字或图片
Listbox 列表框。一个选项列表,用户可以从中选择
Menu 菜单。单击后弹出一个选项列表,用户可以从中选择
Menubutton 菜单按钮。用来包含菜单的组件(有下拉式、层叠式)
Message 消息框。类似于标签,但可以显示多行文本
Scale 进度条。线性“滑块”组件,可设定起始值和结束值,显示当前位置的精确值
Scrollbar 滚动条。对其支持的组件(文本域、画布、列表框、文本框)提供滚动功能
Text 文本域。多行文字区域,可用来收集(或显示用户输入的文字)
Topeval 顶级。类似框架,但提供一个独立的窗口容器

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论