欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python GUI之tkinter詳解

 更新時(shí)間:2021年10月11日 16:19:41   作者:繁星伴晚安  
今天帶大家學(xué)習(xí)Python GUI之tkinter的相關(guān)知識(shí),文中對(duì)如何使用tkinter作了非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下

展示

在這里插入圖片描述

import tkinter
 if __name__ == '__main__':
    win = tkinter.Tk()
     #設(shè)置標(biāo)題
    win.title("我的世界")
     #設(shè)置寬和高
    win.geometry('800x600')
     #創(chuàng)建畫布,設(shè)置背景色,高,寬
    canvas = tkinter.Canvas(win,bg='#EBEBEB',width=800,height=1200,xscrollincrement = 1,
                yscrollincrement = 1)
    x0,y0 = 100,100
    # 創(chuàng)建一個(gè)圓,填充紅色,輪廓白色
    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()
     #設(shè)置標(biāo)題
    win.title("我的世界")
     #設(shè)置寬和高
    win.geometry('800x600')
    frame = Frame(win)
     #創(chuàng)建畫布,設(shè)置背景色,高,寬
    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)  # 定義水平滾動(dòng)條
    hbar.pack(side=BOTTOM, fill=X)  # 放置水平滾動(dòng)條在最下側(cè),占滿X軸
    hbar.config(command=canvas.xview)# 設(shè)置水平滾動(dòng)條的函數(shù)與畫布的X軸滾動(dòng)條事件綁定
    vbar = Scrollbar(frame,orient=VERTICAL)  # 定義垂直滾動(dòng)條
    vbar.pack(side=RIGHT, fill=Y)  # 放置垂直滾動(dòng)條在最右側(cè),占滿Y軸
    vbar.config(command=canvas.yview)# 設(shè)置垂直滾動(dòng)條的函數(shù)與畫布的Y軸滾動(dòng)條事件綁定
     canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) # 設(shè)置畫布的X,Y軸滾動(dòng)條函數(shù)與垂直滾動(dòng)條綁定
    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()
 #設(shè)置標(biāo)題
win.title("我的世界")
 #設(shè)置寬和高
win.geometry('800x600')
frame = Frame(win)
 #創(chuàng)建畫布,設(shè)置背景色,高,寬
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)  # 定義水平滾動(dòng)條
hbar.pack(side=BOTTOM, fill=X)  # 放置水平滾動(dòng)條在最下側(cè),占滿X軸
hbar.config(command=canvas.xview)# 設(shè)置水平滾動(dòng)條的函數(shù)與畫布的X軸滾動(dòng)條事件綁定
vbar = Scrollbar(frame,orient=VERTICAL)  # 定義垂直滾動(dòng)條
vbar.pack(side=RIGHT, fill=Y)  # 放置垂直滾動(dòng)條在最右側(cè),占滿Y軸
vbar.config(command=canvas.yview)# 設(shè)置垂直滾動(dòng)條的函數(shù)與畫布的Y軸滾動(dòng)條事件綁定
 canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) # 設(shè)置畫布的X,Y軸滾動(dòng)條函數(shù)與垂直滾動(dòng)條綁定
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()
 

暫定版本

個(gè)人知識(shí)還是不夠,里面還有很多小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:繼續(xù)搜索 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)  # 定義水平滾動(dòng)條
        hbar.pack(side=BOTTOM, fill=X)  # 放置水平滾動(dòng)條在最下側(cè),占滿X軸
        hbar.config(command=self.__canvas.xview)  # 設(shè)置水平滾動(dòng)條的函數(shù)與畫布的X軸滾動(dòng)條事件綁定
        vbar = Scrollbar(self.__frame, orient=VERTICAL)  # 定義垂直滾動(dòng)條
        vbar.pack(side=RIGHT, fill=Y)  # 放置垂直滾動(dòng)條在最右側(cè),占滿Y軸
        vbar.config(command=self.__canvas.yview)  # 設(shè)置垂直滾動(dòng)條的函數(shù)與畫布的Y軸滾動(dòng)條事件綁定
         self.__canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)  # 設(shè)置畫布的X,Y軸滾動(dòng)條函數(shù)與垂直滾動(dòng)條綁定
        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
     # 按鍵響應(yīng)程序
    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)  # 繼續(xù)搜索
     #初始化
    def __new(self,event=None):
        self.__lock.acquire()       #上鎖
        self.__running = False      #標(biāo)志位
        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  # 標(biāo)志位
        self.__lock.release()  # 釋放鎖
        self.__root.destroy()
        print(u"\n程序已退出...")
        sys.exit()
        # 停止搜索
     def __stop(self,event=None):
        self.__lock.acquire()  # 上鎖
        self.__running = False  # 標(biāo)志位
        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  # 標(biāo)志位
        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  # 標(biāo)志位
        self.__lock.release()  # 釋放鎖
    def mainloop(self):
        self.__root.mainloop()
if __name__ == '__main__':
     tsp = TSP(Tk(),cities)
    tsp.mainloop()

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Python接口自動(dòng)化判斷元素原理解析

    Python接口自動(dòng)化判斷元素原理解析

    這篇文章主要介紹了Python接口自動(dòng)化判斷元素原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python+matplotlib繪制餅圖和堆疊圖

    Python+matplotlib繪制餅圖和堆疊圖

    Matplotlib是Python的繪圖庫(kù),它能讓使用者很輕松地將數(shù)據(jù)圖形化,并且提供多樣化的輸出格式。本文將為大家介紹如何用matplotlib繪制餅圖和堆疊圖,感興趣的朋友可以學(xué)習(xí)一下
    2022-04-04
  • Python使用turtle庫(kù)繪制小豬佩奇(實(shí)例代碼)

    Python使用turtle庫(kù)繪制小豬佩奇(實(shí)例代碼)

    這篇文章主要介紹了Python使用turtle庫(kù)繪制小豬佩奇,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • python如何進(jìn)行矩陣運(yùn)算

    python如何進(jìn)行矩陣運(yùn)算

    在本篇文章里小編給大家分享的是關(guān)于python進(jìn)行矩陣運(yùn)算的方法及實(shí)例代碼,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python TKinter如何自動(dòng)關(guān)閉主窗口

    Python TKinter如何自動(dòng)關(guān)閉主窗口

    這篇文章主要介紹了Python TKinter如何自動(dòng)關(guān)閉主窗口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Django MEDIA的配置及用法詳解

    Django MEDIA的配置及用法詳解

    這篇文章主要介紹了Django MEDIA的配置及用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python刪除某個(gè)目錄文件夾的方法

    python刪除某個(gè)目錄文件夾的方法

    在本篇文章里小編給大家分享的是關(guān)于python刪除某個(gè)目錄文件夾的方法,有興趣的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • 解決Python數(shù)據(jù)可視化中文部分顯示方塊問(wèn)題

    解決Python數(shù)據(jù)可視化中文部分顯示方塊問(wèn)題

    這篇文章主要介紹了解決Python數(shù)據(jù)可視化中文部分顯示方塊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python使用torch隨機(jī)初始化參數(shù)

    python使用torch隨機(jī)初始化參數(shù)

    這篇文章主要介紹了python使用torch隨機(jī)初始化參數(shù),文章圍繞torch隨機(jī)初始化參數(shù)的相關(guān)資料展開文章詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • Python基于回溯法子集樹模板解決馬踏棋盤問(wèn)題示例

    Python基于回溯法子集樹模板解決馬踏棋盤問(wèn)題示例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決馬踏棋盤問(wèn)題,簡(jiǎn)單描述了國(guó)際象棋馬踏棋盤問(wèn)題,并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹模板解決馬踏棋盤問(wèn)題的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2017-09-09

最新評(píng)論