國家不給發(fā)對(duì)象,自己發(fā)一個(gè)吧

今天好寂寞啊,來做一個(gè)老婆生成器吧,讓你的夜晚不在空虛。
話不多說,上我老婆

1.gif
小孩子才做選擇啊,我全都要!
0.png

1.代碼其實(shí)很簡單,就是在一塊畫布上隨機(jī)放上圖片。首先我們創(chuàng)建一個(gè)WifeGenerator類,放上一塊畫布和一個(gè)按鈕

class WifeGenerator(Tk):
    def __init__(self):
        super().__init__()
        self.title('老婆生成器')
        self.geometry('400x500')

        # 畫布
        self.canvas = Canvas(self, width=300, height=400)
        self.canvas.place(x=200, y=230, anchor='center')

        # 開始按鈕
        self.btn_start = Button(self, text='就決定是你了', font=('宋體', 15), bd=1, command=self.begin)
        self.btn_start.place(x=200, y=465, anchor='center')

2.要隨機(jī)選擇圖片,我們可以把所有圖片放在一個(gè)列表中,然后隨機(jī)生成一個(gè)下標(biāo)。這里教大家一個(gè)小技巧,使用推導(dǎo)式可以方便的把N個(gè)圖片放在列表中

img_list = [str(i) + '.png' for i in range(n)]

3.圖片要滾動(dòng)起來,需要在一個(gè)循環(huán)中不停地隨機(jī)放置圖片

    def timer(self):
        global wife_file
        # 設(shè)置隨機(jī)的時(shí)間
        ran_time = random.randint(2, 3)    # 圖片快速滾動(dòng)的時(shí)間
        ran_end_time = random.randint(1, 2)    # 在1到2秒內(nèi)滾動(dòng)速度慢慢下降

        while True:
            self.btn_start['state'] = DISABLED

            # 生成一個(gè)0~25的隨機(jī)數(shù)
            img_index = random.randint(0, 25)
            
            # PIL模塊是一個(gè)圖像處理庫,和tkinter也有很好的接口
            pil_wife= Image.open('./img/wife/' + img_list[img_index])
            # 重新設(shè)置圖片的尺寸為300x400
            pil_wife= pil_wife.resize((300, 400), Image.ANTIALIAS)
            vegetable_file = ImageTk.PhotoImage(pil_vegetable)
            # 把隨機(jī)的圖片放在畫板的中間
            self.canvas.create_image(150, 200, anchor='center', image=wife_file)

            # 這里設(shè)置圖片滾動(dòng)速度的規(guī)則
            if counter <= ran_time:
                time.sleep(0.05)
                counter += 0.05
            elif counter <= (ran_time + ran_end_time/2):
                time.sleep(0.1)
                counter += 0.1
            elif counter <= (ran_time + ran_end_time/4*3):
                time.sleep(0.2)
                counter += 0.2
            elif counter <= (ran_time + ran_end_time):
                time.sleep(0.3)
                counter += 0.3
            else:
                self.btn_start['state'] = NORMAL
                break

4.最后在按鈕的command中用多線程調(diào)用這個(gè)函數(shù)timer

    def begin(self):
        threading.Thread(target=self.timer).start()

今天的小菊花哥哥課堂就到這里了,如有疑問和指教,歡迎交流

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容