亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中使用 tkinter GUI 單擊圖像和文本

在 Python 中使用 tkinter GUI 單擊圖像和文本

鴻蒙傳說 2022-06-28 15:35:10
我有一個帶有幻燈片和名為“df_slides”的文本的熊貓數據庫。我想制作一個 tkinter GUI 來單擊幻燈片并顯示文本,如下所示:這是我迄今為止實施的:import tkinterfrom PIL import Image, ImageTkimport base64import pandas as pdi = 0def load_next_img():    global pil_image, tk_image, i, text    i = i+1    base64string = df_slides["Slide_Image"][i]    imgdata = base64.b64decode(base64string)    pil_image =  Image.open(io.BytesIO(imgdata))    tk_image = ImageTk.PhotoImage(pil_image)    label['image'] = tk_image    text = df_slides["Text"][i]def load_previous_img():    global pil_image, tk_image, i, text    i = i-1    base64string = df_slides["Slide_Image"][i]    imgdata = base64.b64decode(base64string)    pil_image =  Image.open(io.BytesIO(imgdata))    tk_image = ImageTk.PhotoImage(pil_image)    label['image'] = tk_image    text = df_slides["Text"][i]root = tkinter.Tk()label = tkinter.Label(root)label.pack(side = "bottom", fill = "both", expand = "yes")load_next_img()nextbutton = tkinter.Button(text="next", command=load_next_img)nextbutton.pack()backbutton = tkinter.Button(text="back", command=load_previous_img)backbutton.pack()T = tkinter.Text(root, height=10, width=30)T.pack()T.insert(tkinter.END, text)root.mainloop()這是當前的結果:如您所見,文本沒有使用全寬,更重要的是,當我按“下一步”和“返回”時,它不會與幻燈片一起更新?;脽羝瑫拢谋臼冀K保持不變。
查看完整描述

1 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

T.insert(tkinter.END, text)必須出現在函數load_next_img和load_previous_img中。對我來說,最簡單的方法是定義一個類'Slides'來獲得正確的命名空間。注意更新標簽使用self.label.configure(image=tk_image)


下面是我注釋掉數據框但應該提示如何解決的示例。注意清除文本我還添加了一行self.T.delete('1.0', tkinter.END)


import tkinter

from PIL import Image, ImageTk

import base64

import pandas as pd



class Slides:


    def __init__(self):

        self.text_array = ['hello there', 'good bye']

        self.pic_array = ['test_1.jpg', 'test_2.jpg']


        self.root = tkinter.Tk()


        nextbutton = tkinter.Button(text="next", command=self.load_next_img)

        nextbutton.pack()

        backbutton = tkinter.Button(text="back", command=self.load_previous_img)

        backbutton.pack()


        self.slide_image = tkinter.Label(self.root)

        self.slide_image.pack(side="bottom", fill="both", expand="yes")


        self.text_box = tkinter.Text(self.root, height=10, width=30)

        self.text_box.pack()


        self.i = -1

        self.load_next_img()


        self.root.mainloop()


    def load_next_img(self):

        self.i += 1

        # base64string = df_slides["Slide_Image"][i]

        # imgdata = base64.b64decode(base64string)

        pil_image =  Image.open(self.pic_array[self.i % 2])

        pil_image = pil_image.resize((200, 200), Image.ANTIALIAS)  # just for my convenience

        tk_image = ImageTk.PhotoImage(image=pil_image)

        self.slide_image.configure(image=tk_image)

        self.slide_image.image = tk_image


        text = self.text_array[self.i % 2]

        self.text_box.delete('1.0', tkinter.END)

        self.text_box.insert(tkinter.END, text)


    def load_previous_img(self):

        self.i -= 1

        # base64string = df_slides["Slide_Image"][i]

        # imgdata = base64.b64decode(base64string)

        pil_image = Image.open(self.pic_array[self.i % 2])

        pil_image = pil_image.resize((200, 200), Image.ANTIALIAS) # just for my convenience

        tk_image = ImageTk.PhotoImage(image=pil_image)

        self.slide_image.configure(image=tk_image)

        self.slide_image.image = tk_image


        text = self.text_array[self.i % 2]

        self.text_box.delete('1.0', tkinter.END)

        self.text_box.insert(tkinter.END, text)



def main():

    slides = Slides()



if __name__ == '__main__':

    main()

為了正確定位按鈕、標簽和文本,我建議使用grid,而不是pack.


PS。我冒昧地將變量label更改slide_image為Ttext_box


查看完整回答
反對 回復 2022-06-28
  • 1 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號