我正在嘗試向包含在畫布中的框架動態添加標簽,以實作滾動條功能。標簽是通過從按鈕呼叫的函式添加的。如果在啟動時呼叫該函式,則該函式可以正常作業,框架按預期更新并且我具有滾動條功能。如果我從按鈕命令呼叫該函式,則框架會使用標簽更新,但僅限于起始框架/畫布大小的限制。包含其余標簽的框架的附加區域將不可見,因為滾動條未“激活”
我嘗試搜索,但找不到之前問過的這個問題。我是 Python 和 Tkinter 的新手,如果我遺漏了一些明顯的東西,我深表歉意。
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("550x550")
main_frame = Frame(root)
main_frame.grid(row = 0, column = 0)
button_frame = Frame(root)
button_frame.grid(row = 1, column = 0)
image_canvas_0 = Canvas(main_frame, height = 500, width = 500)
image_canvas_0.grid(row = 0, column = 0)
image_canvas_0_scrollbar = ttk.Scrollbar(main_frame, orient = VERTICAL, command = image_canvas_0.yview)
image_canvas_0_scrollbar.grid(column = 1, row = 0, sticky = (N,S))
image_canvas_0.config(yscrollcommand = image_canvas_0_scrollbar.set)
image_canvas_0.bind('<Configure>', lambda e: image_canvas_0.configure(scrollregion = image_canvas_0.bbox("all")))
second_frame = Frame(image_canvas_0)
image_canvas_0.create_window((0,0), window = second_frame, anchor = 'nw')
def test_function(*args):
for i in range(100):
label_text = 'test' str(i)
Label(second_frame, text = label_text).grid(row = i, column = 0)
func_button = Button(button_frame, text = 'Click Me', command = test_function)
func_button.grid(row = 0, column = 0)
#test_function()
root.mainloop()
uj5u.com熱心網友回復:
scrollregion在將小部件添加到框架后,您不會更改。畫布不知道應該可以滾動的新資料。
通常這是通過向框架的<Configure>事件添加系結來完成的,因為只要框架改變大小,就會觸發該事件。
second_frame.bind("<Configure>", lambda e: image_canvas_0.configure(scrollregion = image_canvas_0.bbox("all")))
在啟動時直接呼叫該函式時,您的代碼似乎可以作業的原因是您在畫布本身上有一個類似的系結,一旦小部件實際顯示在螢屏上,它就會自動觸發。這發生在你第一次開始運行test_function()時呼叫之后mainloop。程式啟動后,畫布<Configure>事件不會再次觸發。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/371965.html
