如何理解Python GUI中的tkinter
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"如何理解Python GUI中的tkinter",在日常操作中,相信很多人在如何理解Python GUI中的tkinter问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2026年11月02日如何理解Python GUI中的tkinter
这篇文章主要介绍"如何理解Python GUI中的tkinter",在日常操作中,相信很多人在如何理解Python GUI中的tkinter问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何理解Python GUI中的tkinter"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
展示

import tkinter if __name__ == '__main__': win = tkinter.Tk() #设置标题 win.title("我的世界") #设置宽和高 win.geometry('800x600') #创建画布,设置背景色,高,宽 canvas = tkinter.Canvas(win,bg='#EBEBEB',width=800,height=1200,xscrollincrement = 1, yscrollincrement = 1) x0,y0 = 100,100 # 创建一个圆,填充红色,轮廓白色 oval = canvas.create_oval(x0-5,y0-5,x0+5,y0+5,fill='#ff0000',outline="#000000",tags="node") canvas.create_text(x0,y0-10,text='('+str(x0) +','+str(y0)+')',fill='black',tags="text") p1 = (x0,y0) x0, y0 = 120,170 oval = canvas.create_oval(x0 - 5, y0 - 5, x0 + 5, y0 + 5, fill='#ff0000', outline="#000000", tags="node") canvas.create_text(x0, y0 - 10, text='(' + str(x0) + ',' + str(y0) + ')', fill='black',tags="text") p2 = (x0, y0) #连线 canvas.create_line(p1, p2, fill='#000000', tags="line") canvas.pack(expand = tkinter.YES, fill = tkinter.BOTH) #删除tags = "text" # canvas.delete("text") win.mainloop()from tkinter import *import randomif __name__ == '__main__': win = Tk() #设置标题 win.title("我的世界") #设置宽和高 win.geometry('800x600') frame = Frame(win) #创建画布,设置背景色,高,宽 canvas = Canvas(frame,bg='#EBEBEB',width=800,height=800,scrollregion=(0,0,2000,1200)) pos = [[565.0,575.0],[25.0,185.0],[345.0,750.0],[945.0,685.0],[845.0,655.0], [880.0,660.0],[25.0,230.0],[525.0,1000.0],[580.0,1175.0],[650.0,1130.0], [1605.0,620.0],[1220.0,580.0],[1465.0,200.0],[1530.0, 5.0],[845.0,680.0], [725.0,370.0],[145.0,665.0],[415.0,635.0],[510.0,875.0],[560.0,365.0], [300.0,465.0],[520.0,585.0],[480.0,415.0],[835.0,625.0],[975.0,580.0], [1215.0,245.0],[1320.0,315.0],[1250.0,400.0],[660.0,180.0],[410.0,250.0], [420.0,555.0],[575.0,665.0],[1150.0,1160.0],[700.0,580.0],[685.0,595.0], [685.0,610.0],[770.0,610.0],[795.0,645.0],[720.0,635.0],[760.0,650.0], [475.0,960.0],[95.0,260.0],[875.0,920.0],[700.0,500.0],[555.0,815.0], [830.0,485.0],[1170.0, 65.0],[830.0,610.0],[605.0,625.0],[595.0,360.0], [1340.0,725.0],[1740.0,245.0]] for x,y in pos: canvas.create_oval(x - 5, y - 5, x + 5, y + 5, fill='#ff0000', outline="#000000", tags="node") canvas.create_text(x, y - 10, text='(' + str(x) + ',' + str(y) + ')', fill='black', tags="text") length = len(pos) path = [x for x in range(length)] random.shuffle(path) for i in range(length-1): canvas.create_line(pos[i], pos[i+1], fill='#000000', tags="line") hbar = Scrollbar(frame,orient=HORIZONTAL) # 定义水平滚动条 hbar.pack(side=BOTTOM, fill=X) # 放置水平滚动条在最下侧,占满X轴 hbar.config(command=canvas.xview)# 设置水平滚动条的函数与画布的X轴滚动条事件绑定 vbar = Scrollbar(frame,orient=VERTICAL) # 定义垂直滚动条 vbar.pack(side=RIGHT, fill=Y) # 放置垂直滚动条在最右侧,占满Y轴 vbar.config(command=canvas.yview)# 设置垂直滚动条的函数与画布的Y轴滚动条事件绑定 canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) # 设置画布的X,Y轴滚动条函数与垂直滚动条绑定 canvas.pack(expand=True, fill=BOTH) frame.pack(expand=True, fill=BOTH) #删除tags = "text" # canvas.delete("text") win.mainloop()多线程

import timefrom tkinter import *import randomimport threadingpos = [[565.0,575.0],[25.0,185.0],[345.0,750.0],[945.0,685.0],[845.0,655.0], [880.0,660.0],[25.0,230.0],[525.0,1000.0],[580.0,1175.0],[650.0,1130.0], [1605.0,620.0],[1220.0,580.0],[1465.0,200.0],[1530.0, 5.0],[845.0,680.0], [725.0,370.0],[145.0,665.0],[415.0,635.0],[510.0,875.0],[560.0,365.0], [300.0,465.0],[520.0,585.0],[480.0,415.0],[835.0,625.0],[975.0,580.0], [1215.0,245.0],[1320.0,315.0],[1250.0,400.0],[660.0,180.0],[410.0,250.0], [420.0,555.0],[575.0,665.0],[1150.0,1160.0],[700.0,580.0],[685.0,595.0], [685.0,610.0],[770.0,610.0],[795.0,645.0],[720.0,635.0],[760.0,650.0], [475.0,960.0],[95.0,260.0],[875.0,920.0],[700.0,500.0],[555.0,815.0], [830.0,485.0],[1170.0, 65.0],[830.0,610.0],[605.0,625.0],[595.0,360.0], [1340.0,725.0],[1740.0,245.0]] win = Tk() #设置标题win.title("我的世界") #设置宽和高win.geometry('800x600')frame = Frame(win) #创建画布,设置背景色,高,宽canvas = Canvas(frame,bg='#EBEBEB',width=800,height=800,scrollregion=(0,0,2000,1200)) for x,y in pos: canvas.create_oval(x - 5, y - 5, x + 5, y + 5, fill='#ff0000', outline="#000000", tags="node") canvas.create_text(x, y - 10, text='(' + str(x) + ',' + str(y) + ')', fill='black', tags="text") hbar = Scrollbar(frame,orient=HORIZONTAL) # 定义水平滚动条hbar.pack(side=BOTTOM, fill=X) # 放置水平滚动条在最下侧,占满X轴hbar.config(command=canvas.xview)# 设置水平滚动条的函数与画布的X轴滚动条事件绑定vbar = Scrollbar(frame,orient=VERTICAL) # 定义垂直滚动条vbar.pack(side=RIGHT, fill=Y) # 放置垂直滚动条在最右侧,占满Y轴vbar.config(command=canvas.yview)# 设置垂直滚动条的函数与画布的Y轴滚动条事件绑定 canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) # 设置画布的X,Y轴滚动条函数与垂直滚动条绑定canvas.pack(expand=True, fill=BOTH)frame.pack(expand=True, fill=BOTH)def run(): length = len(pos) path = [x for x in range(length)] random.shuffle(path) time.sleep(1) for i in range(length - 1): canvas.create_line(pos[i], pos[i + 1], fill='#000000', tags="line", arrow=LAST, width=1) time.sleep(1)if __name__ == '__main__': #删除tags = "text" # canvas.delete("text") t = threading.Thread(target=run) t.start() win.mainloop()暂定版本
个人知识还是不够,里面还有很多小bug,容我再思考思考
import timefrom tkinter import *import randomimport sysimport threadingclass TSP(object): def __init__(self,root,cities:list[list]): self.__root = root self.__root.geometry('800x600') self.__root.title("TSP蚁群算法(n:初始化 e:开始搜索 s:停止搜索 c:继续搜索 q:退出程序)") self.__frame = Frame(root) self.__canvas = Canvas(self.__frame,bg='#EBEBEB',width=800,height=800,scrollregion=(0,0,2000,1200)) hbar = Scrollbar(self.__frame, orient=HORIZONTAL) # 定义水平滚动条 hbar.pack(side=BOTTOM, fill=X) # 放置水平滚动条在最下侧,占满X轴 hbar.config(command=self.__canvas.xview) # 设置水平滚动条的函数与画布的X轴滚动条事件绑定 vbar = Scrollbar(self.__frame, orient=VERTICAL) # 定义垂直滚动条 vbar.pack(side=RIGHT, fill=Y) # 放置垂直滚动条在最右侧,占满Y轴 vbar.config(command=self.__canvas.yview) # 设置垂直滚动条的函数与画布的Y轴滚动条事件绑定 self.__canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) # 设置画布的X,Y轴滚动条函数与垂直滚动条绑定 self.__canvas.pack(expand=True, fill=BOTH) self.__frame.pack(expand=True, fill=BOTH) self.setCity(cities) self.__lock = threading.RLock() # 线程锁 self.__bindEvents() self.__new() def setCity(self,cities:list[list]): self.__cities = cities def sefPathsAndValues(self,paths:[list],values:list): self.__paths = paths self.__values = values # 按键响应程序 def __bindEvents(self): self.__root.bind("q", self.__quite) # 退出程序 self.__root.bind("n", self.__new) # 初始化 self.__root.bind("e", self.__search_path) # 开始搜索 self.__root.bind("s", self.__stop) # 停止搜索 self.__root.bind("c", self.__continue) # 继续搜索 #初始化 def __new(self,event=None): self.__lock.acquire() #上锁 self.__running = False #标志位 self.__lock.release() #释放锁 for x, y in self.__cities: self.__canvas.create_oval(x - 5, y - 5, x + 5, y + 5, fill='#ff0000', outline="#000000", tags="node") self.__canvas.create_text(x, y - 10, text='(' + str(x) + ',' + str(y) + ')', fill='black', tags="text") def __quite(self,event=None): self.__lock.acquire() # 上锁 self.__running = False # 标志位 self.__lock.release() # 释放锁 self.__root.destroy() print(u"\n程序已退出...") sys.exit() # 停止搜索 def __stop(self,event=None): self.__lock.acquire() # 上锁 self.__running = False # 标志位 self.__lock.release() # 释放锁 def __line(self,path:list): self.__canvas.delete("line") i = 0 while self.__running: if i == len(self.__cities) -1: break p1, p2 = self.__cities[path[i]], self.__cities[path[i + 1]] self.__canvas.create_line(p1, p2, fill='#000000', tags="line", arrow=LAST, width=1) self.__canvas.update() self.__canvas.after(500) i = i+1 # 开始搜索 def __search_path(self,event=None): self.__lock.acquire() # 上锁 self.__running = True # 标志位 self.__lock.release() # 释放锁 while self.__running: x = random.randint(10,100) label = Label(self.__canvas,text="最佳路径总距离:"+str(x)).place(x=10,y=30) self.__canvas.update() path = [x for x in range(len(self.__cities))] random.shuffle(path) self.__line(path) def __continue(self,event=None): self.__lock.acquire() # 上锁 self.__running = True # 标志位 self.__lock.release() # 释放锁 def mainloop(self): self.__root.mainloop()if __name__ == '__main__': tsp = TSP(Tk(),cities) tsp.mainloop()到此,关于"如何理解Python GUI中的tkinter"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
画布
函数
水平
搜索
事件
标志
程序
学习
世界
右侧
标题
背景
更多
知识
线程
帮助
实用
接下来
不够
个人
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网加科技
国智互联网科技
互联网电商科技
圆梦互联网科技
互联网金融 金融科技
齐家互联网科技
互联网科技美容
无锡溥仪互联网科技有限公司
成都仁贤领冠互联网科技有限公司
汉立互联网科技有限公司联系电话
华中科技有哪些互联网大佬
佛山市拉法互联网科技有限公司
玉溪新华互联网科技好不好
互联网科技快讯热点
下一代互联网重大应用科技园
云鲸互联网络科技有限公司
版纳互联网科技选哪家
互联网科技对化妆品行业
互联网领先科技成果宣传视频
互联网科技快速发展优美句子
美国互联网科技巨头监管
互联网科技logo
广西互联网科技公司
互联网科技美容
互联网前沿科技
来此购互联网科技有限公司
互联网金融中的现代科技
燊美集互联网科技有限公司
高科技互联网发展前景如何
互联网的科技体现在哪里