Python GUI之Tkinter
前言
-
基于文本用户编程(Text-based User Interface,TUI)
-
图形用户编程(Graphical User Interface, GUI)
Python提供了很多的GUI界面工具,如python的标准TK GUI工具包接口Tkinter、wxWidgets模块、easyGUI模块、wxPython模块等。本文主要介绍使用Tkinter模块开发图形用户界面的方法,并介绍一些常用的Tkinter组件。
文章目录
一、Tkinter模块
Tkinter模块(TK接口)是Python的标准TK GUI工具包的接口。TK和TKinter可以在大多数Unix平台下使用,也可以应用在Windows和Macintosh系统里。
1. 创建Windows窗体
在GUI程序中,首先需要建立一个顶层窗口,这个顶层窗口可以容纳所有的小窗口对象,如标签、按钮、列表框等,即,顶层窗口是用来放置其他窗口或组件的地方。
1.1. 创建窗口对象
import tkinter
win = tkinter.Tk() #创建一个窗体对象并取名为win,可以叫顶层窗口或根窗口 win.mainloop() #显示窗体,并进入无限监听事件循环,直到单机窗体右上方的关闭按钮,或者使用其他方法将窗口关闭
1.2. 设置窗体属性
可以通过设置窗体的属性来改变窗体的显示方式。
如,title()可设置窗口的标题;
还可通过内建的geometry()、maxsize()、minsize()方法设置窗口的大小。geometry(size)方法设置窗体初始大小,size的格式为“宽度x高度”(注意,这里的x不是乘号,是小写的字母x);maxsize()和minsize()方法用来设置最大窗体和最小窗体的尺寸,格式如下:
import tkinter
win = tkinter.Tk() win.title("Tkinter Test Win") win.geometry("800x600") win.maxsize(1440,900) win.minsize(400,300) win.mainloop()
2. 标签组件Label
Label组件是最简单的组件之一,用于在窗口中显示文本或位图。
win = tkinter.Tk() win.title("Tkinter Test Win") lab1 = tkinter.Label(win,text="label test!") #创建Label组件,文本 lab1.pack() #显示lab1 lab2 = tkinter.Label(win,bitmap="error") #创建Label组件,位图 lab2.pack() #显示lab2 win.mainloop()
可选用位图
值 | 具体描述 |
---|---|
error | 显示错误图标 |
hourglass | 显示沙漏图标 |
info | 显示信息图标 |
questhead | 显示疑问头像图标 |
question | 显示疑问图标 |
warning | 显示警告图标 |
gray12 | 显示灰度背景图标gray12 |
gray25 | 显示灰度背景图标gray25 |
gray50 | 显示灰度背景图标gray50 |
gray75 | 显示灰度背景图标gray75 |
由于内置的位图个数有限,而且显示的都是灰度图,所以在实际的应用中,往往会选择一些自定义的图标。这时,可以运用image属性和bm属性来设置自定义的图标,如下:
win = tkinter.Tk() bm = tkinter.PhotoImage(file = 'C:\Python3.8.5\Lib\idlelib\Icons\idle_48.png') lab1 = tkinter.Label(win,image = bm) lab1.bm = bm
lab1.pack() win.mainloop()
运行后如下:
除上面的几个具体方法外,Label组件还有一些常用的属性,如下表:
属性 | 说明 |
---|---|
fg | 设置组件的前景色 |
bg | 设置组件的背景色 |
width | 设置组件宽度 |
height | 设置组件高度 |
compound |
设置文本或图像在Label中如何显示,默认值为None。 当指定image/bitmap时,文本(text)将会被覆盖,只显示图像,可选值如下: left:图像居左显示 right:图像居右显示 top:图像居上显示 bottom:图像巨下显示 center:图像居中显示 |
wraplength | 指定单行文本的长度,用于多行文本显示 |
justify | 指定多行文本的对齐方式 |
anchor |
指定文本或图片在Label中的显示位置,可选值如下: e:垂直居中,水平居右 w:垂直居中,水平居左 n:垂直居上,水平居中 s:垂直居下,水平居中 也可以是上面4个值的两两组合(n, ne, e, se, s, sw, w, nw) center:垂直居中,水平居中 |
example:
win = tkinter.Tk() lab1 = tkinter.Label(win,text = 'jzywdsqa',compound = 'center',bg = 'blue', anchor = 'w', width = 30, height = 30) lab1.pack() win.mainloop()
3. 按钮组件Button
3.1 创建和显示Button对象
Button组件用于在窗体中设置和显示按钮。创建Button对象的基本方法如下:
Button_1 = tkinter.Button(窗体对象,text = "显示名称",command = 点击后调用) Button_1.pack()
创建简单的按钮:
import tkinter from tkinter import messagebox def Submit(): messagebox.showinfo(title = "",message = "Submit") def GenerateWin(): win = tkinter.Tk() win.title("Tkinter Test Win") b = tkinter.Button(win,text = "Submit",command = Submit) b.pack() win.mainloop() if __name__ == '__main__' : GenerateWin()
3.2 Button对象的常用属性
按钮上既可以显示文本,也可以显示用户自定义的图片。可以应用image属性和bm属性进行设置。
创建图片格式的按钮:
import tkinter from tkinter import messagebox def Submit(): messagebox.showinfo(title = "",message = "Submit") def GenerateWin(): win = tkinter.Tk() win.title("Tkinter Test Win") bm = tkinter.PhotoImage(file='C:\Python3.8.5\Lib\idlelib\Icons\idle_48.png') b = tkinter.Button(win,text = "Submit",command = Submit,image = bm,compound = 'center',width = 60,height=60) #不加compound则文本会被默认覆盖 b.bm = bm
b.pack() win.mainloop() if __name__ == '__main__' : GenerateWin()
运行后如下:
除上述属性外,Button组件还有一些常用的属性,如下表:
属性 | 说明 |
---|---|
fg | 设置组件的前景色 |
bg | 设置组件的背景色 |
compound |
设置文本或图像在Label中如何显示,默认值为None。 当指定image/bitmap时,文本(text)将会被覆盖,只显示图像,可选值如下: left:图像居左显示 right:图像居右显示 top:图像居上显示 bottom:图像巨下显示 center:图像居中显示 |
wraplength | 指定单行文本的长度,用于多行文本显示 |
bimap | 指定按钮显示位图 |
state | 设置组件状态 |
bd | 设置按钮边框大小,默认值为1或2个像素 |
设置一个有按钮的边框、一个disable的按钮:
import tkinter def GenerateWin(): win = tkinter.Tk() win.title("Tkinter Test Win") b = tkinter.Button(win,text = "加粗按钮", bd = 10) b1 = tkinter.Button(win,text = "Disable Button", state = "disabled") b.pack() b1.pack() win.mainloop() if __name__ == '__main__' : GenerateWin()
", bd = 10)
b1 = tkinter.Button(win,text = “Disable Button”, state = “disabled”)
b.pack()
b1.pack()
win.mainloop()
if name == ‘main’ :
GenerateWin()
本文地址:https://blog.csdn.net/qq_39892503/article/details/108857880
上一篇: 基于Android9.0,了解Android事件分发(一)
下一篇: 薛定谔的贫穷