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
添加回答
舉報