python图形用户接口(GUI)——Tkinter
图形用户接口(GUI)GUI编程基础from tkinter import *root = Tk()# 创建一个主窗体。相当于提供了一个搭积木的桌子root.mainloop()# 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应# mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响...
图形用户接口(GUI)
GUI编程基础
from tkinter import * root = Tk() # 创建一个主窗体。相当于提供了一个搭积木的桌子 root.mainloop() # 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应 # mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响应系统的各种事件
from tkinter import * root = Tk() # 创建一个主窗体。相当于提供了一个搭积木的桌子 label = Label(root, text="Welcome to Python") # label的text属性,显示一条文本信息内容 canvas = Canvas(root, bg="white") # 画布可以显示各种文字图形信息 button = Button(root, text="Click me") # 在主窗体里面添加一个按钮 # 创建完控件之后并不能直接在主窗体里面显示,需要对它进行布局器的管理 #pack默认是从上到下进行排列 label.pack() canvas.pack() button.pack() root.mainloop() # 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应 # mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响应系统的各种事件
从左到右进行排列
from tkinter import * root = Tk() # 创建一个主窗体。相当于提供了一个搭积木的桌子 label = Label(root, text="Welcome to Python") # label的text属性,显示一条文本信息内容 canvas = Canvas(root, bg="white") # 画布可以显示各种文字图形信息 button = Button(root, text="Click me") # 在主窗体里面添加一个按钮 # 创建完控件之后并不能直接在主窗体里面显示,需要对它进行布局器的管理 # pack默认是从上到下进行排列 label.pack(side=LEFT) canvas.pack(side=LEFT) button.pack(side=LEFT) root.mainloop() # 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应 # mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响应系统的各种事件
布局管理器有三种,pack只是其中一种
GUI事件与事件处理
事件(Events):当受控对象状态改变时,视窗操作系统给应用程序的通知或消息
事件处理(Event handlers):捕获并响应事件的用户函数
绑定或捆绑(bind): 建立事件与响应事件处理函数联系
事件就是像我们点击一个鼠标或者输入一些文本信息,操作系统给GUI程序发出的鼠标或者键盘消息
绑定就是将事件和事件处理关联在一起
事件有以下几种
pack是布局器,是用来显示控件的
创建完控件之后是不能再主窗体里面显示的,需要label.pack()才行from tkinter import * root = Tk() # 创建一个主窗体。相当于提供了一个搭积木的桌子 label = Label(root, text="Welcome to python") button1 = Button(root, text="relief") # 控制label的边界 button2 = Button(root, text="color") # 控制label的颜色 label.pack() button1.pack(side=LEFT, anchor=CENTER, expand=YES) # 自左向右排列,显示在中间,拓展占满整个空间 button2.pack(side=LEFT, anchor=CENTER, expand=YES) root.mainloop() # 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应 # mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响应系统的各种事件
from tkinter import * # 定义鼠标事件处理函数 def changeRelief(): reliefList = ['flat', 'raised', 'sunken', 'groove', 'ridge'] global reliefIndex label.config(relief=reliefList[reliefIndex % len(reliefList)]) reliefIndex += 1 def changeColor(event): colorList = ['red', 'blue', 'yellow'] global colorIndex label.config(fg=colorList[colorIndex % len(colorList)]) colorIndex += 1 reliefIndex = 0 colorIndex = 0 root = Tk() # 创建一个主窗体。相当于提供了一个搭积木的桌子 label = Label(root, text="Welcome to python") button1 = Button(root, text="relief", command=changeRelief) # 控制label的边界 button2 = Button(root, text="color") # 控制label的颜色 button2.bind("<Button-1>", changeColor) # 用bind方法来绑定的话要求函数必须有个参数 label.pack() button1.pack(side=LEFT, anchor=CENTER, expand=YES) # 自左向右排列,显示在中间,拓展占满整个空间 button2.pack(side=LEFT, anchor=CENTER, expand=YES) root.mainloop() # 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应 # mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响应系统的各种事件
点击按钮可以改变内容的边框和颜色
键盘改变图形大小
from tkinter import * def increaseRadius(event): global radius if radius < 100: radius += 2 canvas.create_oval(100 - radius, 100 - radius, 100 + radius, 100 + radius, tags="oval") def decreaseRadius(event): global radius if radius > 2: radius -= 2 canvas.create_oval(100 - radius, 100 - radius, 100 + radius, 100 + radius, tags="oval") root = Tk() # 创建一个主窗体。相当于提供了一个搭积木的桌子 canvas = Canvas(root, bg='white', width=200, height=200) canvas.bind("<Up>", increaseRadius) canvas.bind("<Down>", decreaseRadius) canvas.focus_set() # 得到键盘事件的焦点 radius = 50 canvas.create_oval(100 - radius, 100 - radius, 100 + radius, 100 + radius, tags="oval") # 指定左上角坐标和右下角坐标 canvas.pack() root.mainloop() # 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应 # mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响应系统的各种事件
from tkinter import * def increaseRadius(event): canvas.delete("oval") global radius if radius < 100: radius += 2 canvas.create_oval(100 - radius, 100 - radius, 100 + radius, 100 + radius, tags="oval") def decreaseRadius(event): canvas.delete("oval") global radius if radius > 2: radius -= 2 canvas.create_oval(100 - radius, 100 - radius, 100 + radius, 100 + radius, tags="oval") root = Tk() # 创建一个主窗体。相当于提供了一个搭积木的桌子 canvas = Canvas(root, bg='white', width=200, height=200) canvas.bind("<Up>", increaseRadius) canvas.bind("<Down>", decreaseRadius) canvas.focus_set() # 得到键盘事件的焦点 radius = 50 canvas.create_oval(100 - radius, 100 - radius, 100 + radius, 100 + radius, tags="oval") # 指定左上角坐标和右下角坐标 canvas.pack() root.mainloop() # 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应 # mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响应系统的各种事件
消息弹窗
import tkinter.messagebox tkinter.messagebox.showinfo('提示','请选择要隐藏信息的图像')
让用户选择文件路径
from tkinter import filedialog Fpath=filedialog.askopenfilename() print(Fpath)
Fpath是字符串类型,存的就是选择的文件的路径
用坐标控制按钮的排列
import tkinter as tk root = tk.Tk() # 创建一个主窗体。相当于提供了一个搭积木的桌子 Button=tk.Button(root) Button.place(height = 79,width = 66,x = 5,y = 87) Button=tk.Button(root) Button.place(height = 77,width = 73,x = 95,y = 84) Button=tk.Button(root) Button.place(height = 73,width = 86,x = 221,y = 84) Button=tk.Button(root) Button.place(height = 87,width = 54,x = 371,y = 82) Button=tk.Button(root) Button.place(height = 56,width = 58,x = 98,y = 191) Button=tk.Button(root) Button.place(height = 47,width = 77,x = 235,y = 196) root.mainloop() # 开启一个消息循环队列,可以持续不断地接受操作系统发过来的键盘鼠标事件,并作出相应的响应 # mainloop应该放在所有代码的最后一行,执行他之后图形界面才会显示并响应系统的各种事件
绘制直线
from tkinter import * master = Tk() w = Canvas(master, width=300,height=190) w.pack() w.create_line(200,30,200,150, fill='#C0C0C0', width=2,) w.create_line(280,30,280,150, fill='#C0C0C0', width=2,) w.create_line(200,30,280,30, fill='#C0C0C0', width=2,) w.create_line(200,150,280,150, fill='#C0C0C0', width=2,) mainloop()
设置窗口样式、透明和全屏
-toolwindow 可设置窗口为工具栏样式;
-alpha 可设置透明度,0完全透明,1不透明。这里透明是窗口内的所有内容,不仅是窗体,所以要特别小心一个完全透明的窗口!
-fullscreen 设置全屏 注意前面的短横杠(-) 不能少
-topmost 设置窗口置顶。两个同时被置顶的窗口为同级(能互相遮盖),但他们都能同时遮盖住没有被设置为置顶的窗口。
root.attributes('-toolwindow', False, '-alpha', 0.9, '-fullscreen', True, '-topmost', True)
Tkinter布局管理
Tkinter有三种布局管理方式:
- pack
- grid
- place
这三种布局管理在同一个 master window 里是不可以混用的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)