簡體   English   中英

Tkinter滾動條

[英]Tkinter Scrollbar

如果我在scrollbar.pack() text_area.pack()之前調用text_area.pack() (即切換它們),則不會顯示滾動條。 這是為什么? 如果我要創建一個更大的程序,我絕對沒有機會找出問題所在。

from tkinter import *
import tkinter.filedialog



root = Tk()
root.geometry("200x100")
frame = Frame(root,width=150, height=90)
frame.pack()
scrollbar = Scrollbar(frame)
text_area = Text(frame, width=200, height=50,yscrollcommand=scrollbar.set)
scrollbar.config(command=text_area.yview)
scrollbar.pack(side="right", fill="y")
text_area.pack()
root.mainloop()

滾動條不顯示的原因是因為根本沒有空間。 您要指定200x100像素的窗口大小和150x90像素的內部幀大小,但是您試圖在該空間中放置更大的文本小部件。 您指定的尺寸為200x50個字符 (大約1400x750,具體取決於您使用的字體),對於可用空間而言,該尺寸太寬了。

pack工作方式是查看可用空間,將小部件放置在該空間中,然后從下一個小部件的可用空間中減去該小部件所需的空間。 因為您首先放置了文本小部件,並且它請求的空間超出了可用空間,所以它耗盡了所有可用空間。 然后,當您在滾動條上調用pack時,根本沒有地方放它。

反轉順序時,滾動條僅占用可用空間的一小部分,因此有足夠的空間容納文本小部件。

最好的解決方案是更改pack調用順序。 通常,最好調用pack以便最后調用pack小部件是“ hero”,即占據所有剩余空間並隨着窗口的增大和縮小而增大或縮小的小部件。 通常,這是文本小部件或畫布小部件,或者本身包含許多小部件的框架。

tkinter成功的關鍵是不要嘗試將tkinter小部件或窗口強制設置為特定的像素大小(也許畫布除外)。 相反,要么讓小部件使用其默認大小(尤其是按鈕和滾動條),要么選擇一個合理的默認值(行和/或列數)。 然后,Tkinter將根據字體,屏幕分辨率和其他因素計算合適的大小以適合所有內容。

當您切換他們, scrollbar.pack()根本不知道它需要去頂,而是去下一個地方從上到下右。 擴大窗口大小時,您會看到。

您可以通過以下方法解決此問題:

text_area.pack()

與:

text_area.pack(side="left")

當您要設計更復雜的幾何結構時,建議您使用grid而不是pack

其他兩個答案真的很好-我想我想舉一個例子。 就個人而言,我不喜歡使用.pack-我喜歡這樣放置東西: self.set_label_logpage.place(x=175, y=100)

示例代碼:

faultlogframe_logs = tk.Label(self, textvariable=logging_screen_label, font=Roboto_Normal_Font,
                                   height=180, width=400, background='white', foreground='black')

faultlogframe_logs.place(x=605, y=600)

self.scrollbar = Scrollbar(self, orient=VERTICAL, elementborderwidth=4, width=32)
self.scrollbar.pack(pady=60,padx=0, ipady=4, ipadx=4, side=RIGHT, fill=Y)
self.scrollbar_y = Scrollbar(self, orient=HORIZONTAL, width=12, takefocus=1)
self.scrollbar_y.pack(expand=TRUE, ipady=9, ipadx=9, padx=0, pady=0, side=BOTTOM, fill=X, anchor=S)

self.set_label_logpage = tk.Listbox(self, yscrollcommand=self.scrollbar.set, xscrollcommand=self.scrollbar_y.set)
self.set_label_logpage.config(font=Roboto_Normal_Font, background='white', foreground='black', height=16, width=55) #textvariable=self.label_to_display_log
self.set_label_logpage.place(x=175, y=100)

self.scrollbar_y.config(command=self.set_label_logpage.xview)
self.scrollbar.config(command=self.set_label_logpage.yview)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM