過分了,別人用來做桌面應用開發,這家伙卻用來撩妹(2)-上帝給你開了各種撩妹視窗(Tkinter)
續上一篇學習,我們搞定了了tkinter的基礎函式,這次我們開始來搞事情,

一、目錄
過分了,別人用來做桌面應用開發,這家伙卻用來撩妹(2)-上帝給你開了各種撩妹視窗(Tkinter)
一、目錄
二、前言
三、撩妹彈窗正文
第一步:實作一個視窗
第二步:彈窗都是愛你的模樣
第三步:實作啟動多個視窗
第四步:每隔一段時間彈出一個騷擾視窗
第五步:隨機的視窗
二、前言
在開始學習之前,你可能需要去看一下上一篇文章,因為這篇文章方法是使用到上一篇基礎的東西,

過分了,別人用來做桌面應用開發,這家伙卻用來撩妹(1)--上帝給你開一個視窗(Tkinter)
騷操作的本質都是簡單的,只不過是基礎知識的延伸,再加上一點點創意,
一個彈窗,我們會了,那一堆彈窗呢?這次我們要解決一堆彈窗,
三、撩妹彈窗正文
第一步:實作一個視窗
首先我們先來創建一個普通的彈窗,這里我們需要制定一下視窗的需求:
- 視窗大小固定
- 背景顏色為淺藍色
- 顯示文字“祝福彈框”
- 以函式的方式實作,呼叫函式便可啟動彈窗

最終的需求代碼如下:
import tkinter
from tkinter import *
tk=tkinter.Tk()
def window():
tk.title("一個視窗") # 設定視窗名稱
tk.geometry("180x80+500+300")
tk.iconbitmap('favicon.ico')
tk["background"] = "#7AC5CD"
tk.maxsize(180, 80)
tk.minsize(180, 80)
# tk.attributes("-toolwindow", True)#隱藏頂部工具列之后,icon不會顯示
Label(text="祝福彈窗",bg="#7AC5CD",width=25,height=5,font=60).grid(column=1,row=1)
tk.mainloop()
if __name__ == '__main__':
window()
完整需求實作,如圖:

第二步:彈窗都是愛你的模樣
老規矩,我們來說一下我們的需求吧!
- 視窗大小固定
- 彈窗插入一張圖片(任意圖片均可)
- 圖片的大小與視窗一致
- 將下面的桃心圖片顯示在視窗中,

好的,我們的需求已經制定了,那我們來看一下,
這還不簡單,上一張我們不是可以插入圖片了嗎?那還不是分分鐘鐘就搞定的事,來看源代碼
import tkinter
from tkinter import *
tk=tkinter.Tk()
def window():
tk.title("一個視窗") # 設定視窗名稱
tk.geometry("300x300+500+300")
tk.iconbitmap('favicon.ico')
tk["background"] = "#7AC5CD"
photo = tkinter.PhotoImage(file="Figure_1.jpg")
tkinter.Label(tk, image=photo).grid(column=0, row=0) # 把圖片整合到標簽類中
tk.mainloop()
if __name__ == '__main__':
window()

需求是滿足了,桃心也顯示了,但是,jpg格式,不支持,
然后圖片大小可以自動縮放,不行,圖片它有自己的想法,它要做自己,
再來改這個bug,于是,我們引入了另外一個模塊來解決,
import tkinter
from tkinter import *
from PIL import Image, ImageTk
tk=tkinter.Tk()
def window():
tk.title("一個視窗") # 設定視窗名稱
tk.geometry("300x300+500+300")
tk.iconbitmap('favicon.ico')
tk["background"] = "#7AC5CD"
image=Image.open("Figure_1.jpg")#打開圖片
image=image.resize((300,300))#設定圖片大小
photo = ImageTk.PhotoImage(image)#引入圖片
tkinter.Label(tk, image=photo).grid(column=0, row=0) # 把圖片整合到標簽類中
tk.mainloop()
if __name__ == '__main__':
window()

第三步:實作啟動多個視窗
好了,經過前面的學習,我們已經掌握了一個彈窗的生成訣竅,然后我們來學習打開多個彈窗,
可能有的小伙伴就會說了,一個都解決了,多個那我們直接回圈一下,
代碼:
if __name__ == '__main__':
for i in range(1,3):
window()
然而實際上,不管理回圈多少次,頁面都只有一個彈框,這是一個新手都會出現的問題,
如果按照上面的運行,你就會發現,當你關閉一個之后,又有一個彈框彈出來,直到回圈結束,就問你慌不慌,慶幸你只寫了兩個,
這時候,就需要用到多執行緒了,
多執行緒:某度是這么說的,多執行緒(multithreading),是指從軟體或者硬體上實作多個執行緒并發執行的技術,具有多執行緒能力的計算機因有硬體支持而能夠在同一時間執行多于一個執行緒,進而提升整體處理性能,具有這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理或同時多執行緒處理器,在一個程式中,這些獨立運行的程式片段叫作“執行緒”(Thread),利用它編程的概念就叫作“多執行緒處理”
通俗點來說,就比如你一個人在干活,又有一堆活需要做,但你又分不開,怎么辦,再叫個人來呀,這就是多執行緒,本來要你一個人做一天的,現在兩個人只需要半天,
代碼實作:
import threading,time
#不傳引數
def run_threaded(func):
threads = []
for i in range(2):#執行緒數量(視窗數量)
t = threading.Thread(target=func) # 這里的0表示的是串列中需要展示的資料,當然這里你可以在串列中增加欄位數量,這里也可以替換為i
threads.append(t) # 將函式加入到執行緒中
time.sleep(0.1) # 加上停頓時間,防止太快,卡死,
threads[i].start() # 啟動執行緒
#傳引數
def run_threaded2(func,text):
threads = []
for i in range(2): # 執行緒數量
t = threading.Thread(target=func, args=(text,)) # 多個引數args=(text,name,sex,)
threads.append(t) # 將函式加入到執行緒中
time.sleep(0.1) # 加上停頓時間,防止太快,卡死,
threads[i].start() # 啟動執行緒
接著,我們啟動程式,運行,結果發現,一個視窗有文字,一個視窗沒文字,這是怎么回事呢?
if __name__ == '__main__':
run_threaded(window)

原來,這是我們在之前寫程式所埋下的坑,問題出在之前我們定義的標簽上,

原代碼:
Label(text="祝福彈窗",bg="#7AC5CD",width=25,height=5,font=60).pack()
修改之后:
Label(master=tk,text="祝福彈窗",bg="#7AC5CD",width=25,height=5,font=60).pack()
#master=tk指定視窗顯示,框架的父容器,不填寫則會全部寫入到第一個視窗中

多視窗完整代碼:
import tkinter
from tkinter import *
from PIL import Image, ImageTk
import threading,time
def window():
tk = Tk()
tk.title("一個視窗") # 設定視窗名稱
tk.geometry("180x80+500+300")
tk.iconbitmap('favicon.ico')
tk["background"] = "#7AC5CD"
tk.maxsize(180, 80)
tk.minsize(180, 80)
tk.attributes("-toolwindow", True)#隱藏頂部工具列之后,icon不會顯示
Label(master=tk,text="祝福彈窗",bg="#7AC5CD",width=25,height=5,font=60).pack()
#master=tk指定視窗顯示,框架的父容器,不填寫則會全部寫入到第一個視窗中
tk.mainloop()
#不傳引數
def run_threaded(func):
threads = []
for i in range(2):#執行緒數量(視窗數量)
t = threading.Thread(target=func) # 這里的0表示的是串列中需要展示的資料,當然這里你可以在串列中增加欄位數量,這里也可以替換為i
threads.append(t) # 將函式加入到執行緒中
time.sleep(0.1) # 加上停頓時間,防止太快,卡死,
threads[i].start() # 啟動執行緒
if __name__ == '__main__':
run_threaded(window)
第四步:每隔一段時間彈出一個騷擾視窗
多個彈窗已經搞定了,那我們繼續來彈窗,說明需求:
- 需要彈出多個視窗
- 每隔多長時間就會自動彈出一個
- 關閉一個彈窗之后,依然不影響繼續彈窗,

這里我們可以采用定時任務的的方式,也可以直接使用等待,定時任務,可以看這篇,
喝~,我笑了,組長交給他如何寫定時任務,他卻用來撩女朋友(schedule )
代碼如下:
import threading,time
#不傳引數
def run_threaded(func):
threads = []
for i in range(1):#執行緒數量(視窗數量)
t = threading.Thread(target=func) # 這里的0表示的是串列中需要展示的資料,當然這里你可以在串列中增加欄位數量,這里也可以替換為i
threads.append(t) # 將函式加入到執行緒中
time.sleep(0.1) # 加上停頓時間,防止太快,卡死,
threads[i].start() # 啟動執行緒
if __name__ == '__main__':
while True:
time.sleep(3)
run_threaded(window)
是不是很簡單,只需要加上一個等待,每次啟動一個執行緒,
注:千萬不要把這個發給不太懂電腦的人,不然他可能會因為無法阻止視窗的彈窗,而重啟電腦
第五步:隨機的視窗
我們繼續來看隨機彈窗,先來說明需求:
- 需要彈出很多的彈窗
- 需要在不同位置上彈出視窗
在上面,我們已經看出來了,這些視窗彈出的位置,都是固定的,那我們這次來搞定隨機的視窗,在不同位置出現,
要實作不同位置,首先要想到的是創建視窗時的函式,

我們只需要修改后面的坐標位置就可以了,那要如何實作隨機呢,我們需要用到random模塊
import random
print( random.randint(1,10) ) # 產生 1 到 10 的一個整數型亂數
print( random.random() ) # 產生 0 到 1 之間的隨機浮點數
print( random.uniform(1.1,5.4) ) # 產生 1.1 到 5.4 之間的隨機浮點數,區間可以不是整數
print( random.choice('tomorrow') ) # 從序列中隨機選取一個元素
print( random.randrange(1,100,2) ) # 生成從1到100的間隔為2的隨機整數
這里,我們用到 random.randint(1,10),我們來選定一個范圍,并寫入代碼:
from tkinter import *
import random
import threading,time
def window():
tk = Tk()
tk.title("一個視窗") # 設定視窗名稱
tk.geometry("180x80+%s+%s"%(random.randint(500,1000),random.randint(300,500)))
tk.iconbitmap('favicon.ico')
tk["background"] = "#7AC5CD"
tk.maxsize(180, 80)
tk.minsize(180, 80)
tk.attributes("-toolwindow", True)#隱藏頂部工具列之后,icon不會顯示
Label(master=tk,text="祝福彈窗",bg="#7AC5CD",width=25,height=5,font=60).pack()
#master=tk指定視窗顯示,框架的父容器,不填寫則會全部寫入到第一個視窗中
tk.mainloop()
#不傳引數
def run_threaded(func):
threads = []
for i in range(1):#執行緒數量(視窗數量)
t = threading.Thread(target=func) # 這里的0表示的是串列中需要展示的資料,當然這里你可以在串列中增加欄位數量,這里也可以替換為i
threads.append(t) # 將函式加入到執行緒中
time.sleep(0.1) # 加上停頓時間,防止太快,卡死,
threads[i].start() # 啟動執行緒
if __name__ == '__main__':
while True:
time.sleep(3)
run_threaded(window)

這樣,我們就解決了這個彈框事件,
相關推薦:
過分了,別人用來做桌面應用開發,這家伙卻用來撩妹(1)--上帝給你開一個視窗(Tkinter)
matplotlib-bilibili,抖音很火的動態資料視頻自動生成(第四節)-視頻,語音合成
動態資料視頻(第一節)
bilibili,抖音很火的動態資料視頻自動生成(第二節)
matplotlib-bilibili,抖音很火的動態資料視頻自動生成(第三節)
matplotlib給女朋友畫一個愛心吧,這份滿滿的愛意,一定要記得收下
歡迎關注我們!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/286599.html
標籤:python
