返回顶部
首页 > 资讯 > 后端开发 > Python >Python GUI之tkinter详解
  • 396
分享到

Python GUI之tkinter详解

2024-04-02 19:04:59 396人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

展示 import tkinter if __name__ == '__main__': win = tkinter.Tk() #设置标题 win

展示

在这里插入图片描述


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 random
if __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 time
from tkinter import *
import random
import threading
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]]
 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 time
from tkinter import *
import random
import sys
import threading
class 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()

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Python GUI之tkinter详解

本文链接: https://lsjlt.com/news/137785.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python GUI之tkinter详解
    展示 import tkinter if __name__ == '__main__': win = tkinter.Tk() #设置标题 win...
    99+
    2024-04-02
  • python学习之GUI(Tkinter
    button按钮的生成:import Tkinter as tk window=tk.Tk() def buttonClick():     print "Beep!" button=tk.Button(window,text="Cli...
    99+
    2023-01-31
    python GUI Tkinter
  • Python Tkinter GUI
    一,Tkinter介绍Tkinter是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口。Tkinter不是唯一的python图形编程接口,但是是其中比较流行的一个。最大的特点是跨平台,缺点是性能不太好,执...
    99+
    2023-01-31
    Python Tkinter GUI
  • Python GUI(Tkinter)初
    Python version: 3.7.0效果:代码:import tkinter as tk def openPath():     print("aaa") frm = tk.Tk() frm.title('Auto Rename ...
    99+
    2023-01-31
    Python GUI Tkinter
  • python--GUI编程--Tkinter
    Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk...
    99+
    2023-01-30
    python GUI Tkinter
  • Python GUI之如何使用tkinter控件
    目录一、功能按钮二、文本框三、练习一四、练习二:计算器一、功能按钮 格式:Button(父对象,options,…) 父对象:表示当前按钮建立在哪一个窗口下。 options:下面总结一部常用的。 bg或者backg...
    99+
    2022-06-02
    tkinter控件的使用 Python GUI编程
  • Python GUI布局工具Tkinter入门之旅
    目录图形用户界面 (GUI)用于创建GUI的 Python 库Tkinter 基础Tkinter WidgetsLabelButtonEntryComboboxCheckbutton...
    99+
    2024-04-02
  • python --Tkinter详解
    简介 tkinter tkinter(Tk interface)是Python的标准GUl库,支持跨平台的GUl程序开发。tkinter适合小型的GUl程序编写,也特别适合初学者学习GUl编程。 ...
    99+
    2023-09-04
    python 开发语言 后端
  • Tkinter 解密:深入解析 Python 中的 GUI 编程
    Tkinter 的基础 Tkinter 基于 Tk 协议,这是一种用于在不同平台上创建 GUI 的开源标准。它提供了丰富的控件集,包括按钮、标签、文本框和菜单,可以用来构建复杂的 GUI。Tkinter 使用面向对象方法,可以让开发人员轻...
    99+
    2024-04-02
  • Python GUI之tkinter的皮肤(ttkbootstrap)打造出你的窗口之美
    Python GUI之ttkbootstrap 前言官方文档:[https://ttkbootstrap.readthedocs.io/en/latest/](https://ttkboots...
    99+
    2023-09-03
    python
  • Python tkinter GUI动态改变图像
    问题内容 我来自java,只想创建一个带有图片的图形用户界面,但是图片正在动态变化,我不知道它将是哪张图片......但它不起作用,我只能创建一个图像并且无法在 root.mainlo...
    99+
    2024-02-09
  • 如何用python GUI(tkinter)写一个闹铃小程序(思路详解)
    事情的起因是帮助一个朋友写一个程序,来控制他们单位的铃声,平时竟然是手动打铃(阔怕) 事情的第一步:理清思路。需要用到python的几个知识:1、tkinter一些函数控件,2、控件...
    99+
    2024-04-02
  • Python Tkinter 调试技巧:解决 GUI 疑难杂症
    基本调试步骤 检查代码语法:仔细检查代码的语法错误和拼写错误。Tkinter GUI应用程序对语法错误特别敏感。 使用print语句:在关键代码行中使用print语句来打印变量值和调试信息。这有助于您了解代码的执行流程和变量状态。 设置...
    99+
    2024-04-02
  • python入门之Tkinter使用的方法详解
    目录一、前言1.1、Tkinter是什么二、准备工作2.1、Windows演示环境搭建三、Tkinter创建窗口3.1、创建出一个窗口3.2、给窗口取一个标题3.3、窗口设置3.3、...
    99+
    2024-04-02
  • Python GUI编程详解
    目录Python GUI编程0.创建窗口1.Label和Button的使用2.Entry和Text的使用3.Grid网格布局4.Frame框架5.messagebox消息框6.下拉框...
    99+
    2024-04-02
  • Python GUI 之 Combobo
        本章介绍tkinter.ttk的Combobox控件。 2. 环境信息     ********************************     本系列运行平台:Windows10 64bit     Python 版本...
    99+
    2023-01-31
    Python GUI Combobo
  • Python tkinter padx参数详解
    目录1.padx运行总结1.padx 表示在x轴方向上的边距 一般用法是padx=10,表示距离左右两边组件的长度都为10 还可以...
    99+
    2024-04-02
  • Python Tkinter Menu组件详解
    目录何时使用 Menu 组件?用法参数方法add_cascade(**options)add_checkbutton(**options)add_command(**options)...
    99+
    2024-04-02
  • Python可视化tkinter详解
    目录1、基本用法2、常用标签1、基本用法 # coding:utf-8 import tkinter as tk # 创建窗口对象 window = tk.Tk() # 设置串口标题...
    99+
    2024-04-02
  • Tkinter 101:Python GUI 编程的终极秘诀
    控件 Tkinter 提供了广泛的控件,包括按钮、标签、文本框、复选框和菜单。这些控件可以轻松地放置在窗口中并配置以满足特定的需求。 布局管理 Tkinter 使用灵活的布局管理系统,允许开发人员轻松地在窗口中安排控件。常见的布局管理器包...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作