激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python GUI之tkinter詳解

Python GUI之tkinter詳解

2022-01-22 16:10繁星伴晚安 Python

今天帶大家學(xué)習(xí)Python GUI之tkinter的相關(guān)知識,文中對如何使用tkinter作了非常詳細(xì)的介紹及代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下

展示

Python GUI之tkinter詳解

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)建一個圓,填充紅色,輪廓白色
  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()

Python GUI之tkinter詳解

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)  # 定義水平滾動條
  hbar.pack(side=BOTTOM, fill=X)  # 放置水平滾動條在最下側(cè),占滿X軸
  hbar.config(command=canvas.xview)# 設(shè)置水平滾動條的函數(shù)與畫布的X軸滾動條事件綁定
  vbar = Scrollbar(frame,orient=VERTICAL)  # 定義垂直滾動條
  vbar.pack(side=RIGHT, fill=Y)  # 放置垂直滾動條在最右側(cè),占滿Y軸
  vbar.config(command=canvas.yview)# 設(shè)置垂直滾動條的函數(shù)與畫布的Y軸滾動條事件綁定
   canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) # 設(shè)置畫布的X,Y軸滾動條函數(shù)與垂直滾動條綁定
  canvas.pack(expand=True, fill=BOTH)
  frame.pack(expand=True, fill=BOTH)
  #刪除tags = "text"
  # canvas.delete("text")
   win.mainloop()

多線程

Python GUI之tkinter詳解

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)  # 定義水平滾動條
hbar.pack(side=BOTTOM, fill=X)  # 放置水平滾動條在最下側(cè),占滿X軸
hbar.config(command=canvas.xview)# 設(shè)置水平滾動條的函數(shù)與畫布的X軸滾動條事件綁定
vbar = Scrollbar(frame,orient=VERTICAL)  # 定義垂直滾動條
vbar.pack(side=RIGHT, fill=Y)  # 放置垂直滾動條在最右側(cè),占滿Y軸
vbar.config(command=canvas.yview)# 設(shè)置垂直滾動條的函數(shù)與畫布的Y軸滾動條事件綁定
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) # 設(shè)置畫布的X,Y軸滾動條函數(shù)與垂直滾動條綁定
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,容我再思考思考

Python GUI之tkinter詳解

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)  # 定義水平滾動條
      hbar.pack(side=BOTTOM, fill=X)  # 放置水平滾動條在最下側(cè),占滿X軸
      hbar.config(command=self.__canvas.xview)  # 設(shè)置水平滾動條的函數(shù)與畫布的X軸滾動條事件綁定
      vbar = Scrollbar(self.__frame, orient=VERTICAL)  # 定義垂直滾動條
      vbar.pack(side=RIGHT, fill=Y)  # 放置垂直滾動條在最右側(cè),占滿Y軸
      vbar.config(command=self.__canvas.yview)  # 設(shè)置垂直滾動條的函數(shù)與畫布的Y軸滾動條事件綁定
       self.__canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)  # 設(shè)置畫布的X,Y軸滾動條函數(shù)與垂直滾動條綁定
      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é)

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

原文鏈接:https://blog.csdn.net/weixin_48180029/article/details/120638034

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久久婷婷天堂 | 国产欧美亚洲精品a | 日韩毛片在线看 | 色播av在线 | 日韩精品中文字幕在线观看 | 日本中文字幕电影在线观看 | 中国女警察一级毛片视频 | 欧美成人免费一区二区三区 | 毛片免费在线观看视频 | 久久久www免费看片 日本视频网 | 国产免费大片视频 | 91av在线国产 | 7777网站| 国产91丝袜在线播放0 | 麻豆一二区 | 国产一级毛片高清视频完整版 | www.射| 欧美黄色性视频 | 久久久久久久久久综合 | julieann艳星激情办公室 | 欧美成人二区 | 极色品影院 | 久久久久久久黄色片 | 国产视频在线一区 | 亚洲欧美日韩综合 | 国产午夜小视频 | 在线2区| 91成人在线免费视频 | 国产乱淫av| 欧美性激情视频 | 亚洲欧美国产视频 | 久久久久久久久浪潮精品 | 日操操夜操操 | 日本一区二区在线看 | 56av国产精品久久久久久久 | 国产美女爽到喷白浆的 | av日韩在线免费观看 | 久久精品日韩 | 午夜爱爱福利 | 九九热久久免费视频 | 一级外国毛片 |