目录
GUI图形用户编程(一)
Tkinter的GUI组件结构体
GUI编程的核心步骤
常用的GUI库
核心步骤和第一个GUI程序
tkinter 主窗口
GUI应用程序类的经典写法
tkinter中的Label标签常用属性
Label(标签)
GUI图形用户编程(一)
Tkinter的GUI组件结构体
GUI编程的核心步骤
常用的GUI库
1.Tkinter
是python的标准GUI库,支持跨平台的GUI程序开发。tkinter适合小型的GUI程序编写,也特别适合初学者学习GUI编程。
2.wxPython
目前表流行,适合大型应用程序开发,功能强于tkinter,整体设计框架类似于MFC(Microsoft Foundation Classes微软基础类库)
3.PyQT
是python编程语言和Qt库的成功融合。Qt库是最强大的库之一。
核心步骤和第一个GUI程序
基于tkinter模块创建GUI程序包含如下4个核心步骤:
1.创建应用程序主窗口对象(也称:根窗口)
(1)通过Tk的无参构造函数。
from tkinter import *
root=Tk()
2.在主窗口中,添加各种可视化组件。比如:按钮(Button)、文本框(Laber)等。
btn01=Button(root)
btn01["text"]="这是一个按钮。"
3.通过几何布局管理器,管理组件的大小和位置
btn01.pack()
4.事件处理
(1)通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)
def songhua(e)
messagebox.showinfo("Message","送你一朵花")
print("送你99朵花!")
btn01.bind("<Button-1>",songhua)
5.第一个GUI程序
from tkinter import *
from tkinter import messagebox
root = Tk()
root.title("the one") # 显示程序名称
root.geometry("500x300+100+200")
btn01 = Button(root)
btn01["text"] = "点我就送花"
btn01.pack()
bntQuit = Button(text="退出", command=root.destroy)
bntQuit.pack()
def songhua(e): # e:事件对象
messagebox.showinfo("Message", "送你一朵玫瑰花")
print("送你99朵玫瑰花")
btn01.bind("<Button-1>", songhua)
root.mainloop() # 调用组件的mainloop()方法,进入事件循环
tkinter 主窗口
主窗口位置和大小
通过geometry(‘wxh±x±y’)进行设置,w为宽度,h为高度,+x表示距屏幕左边的距离;-x表示距屏幕右边的距离;+y表示距屏幕上边的距离;-y表示距屏幕下边的距离。
from tkinter import *
root = Tk()
root.geometry("400x100+200+300")
GUI应用程序类的经典写法
采用面向对象的方法,可更加合理的组织代码。
通过Application组织整个GUI程序,类Application继承了Frame及通过继承拥有了父类的特性。通过构造函数——init——()初始化窗口中的对象,通过createWidgets()方法创建窗口中的对象。
Frame框架是一个tkinter组件,表示一个矩形的区域。Frame一般作为容器使用,从而实现复杂的布局。
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.bnt01 = Button(self)
self.bnt01["text"] = "点击送花"
self.bnt01.pack()
self.bnt01["command"] = self.songhua
# 创建一个退出按钮
self.bntQuit = Button(self, text="退出", command=root.destroy)
self.bntQuit.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()
tkinter中的Label标签常用属性
Label(标签)
主要用于显示文本信息,也可以显示图像
1.width,height:
用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字占两个字符位置);如果显示是图像,则以像素为单位。默认值是根据具体显示的内容动态调整。
2.font
指定字体和字体大小,如:font=(font—name,size)
3.image
显示在Label上的图像,目前tkinter只支持gif格式。
4.fg和bg
fg(foreground):前景色、bg(background):背景色
5.justify
针对多行文字的对齐,可设置justify属性,可选值“left” “center” or
“right”
代码演示:
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.lable01 = Label(self, text="python程序", width=10, height=2, bg="black", fg="white")
self.lable01.pack()
self.lable02 = Label(self, text="新年快乐", width=10, height=2, bg="blue", fg="white", font=("黑体", 30))
self.lable02.pack()
# 显示图像
global photo # 需将其声明为全局变量,若是局部变量,本方法执行完毕后,图像对象销毁,将不显示图像
photo = PhotoImage(file="图像/img.gif")
self.lable03 = Label(self, image=photo)
self.lable03.pack()
self.lable04 = Label(self, text="山寺日高人未起\n。。。", borderwidth=1, relief="solid", justify="right")
self.lable04.pack()
if __name__ == "__main__":
root = Tk()
root.geometry("600x700+200+300")
app = Application(master=root)
root.mainloop()