繁体   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