无法在Tkin中显示具有固定高度的列表框

2024-04-26 00:14:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的超文本程序的框架中插入一个列表框。 此列表框启动时为空,但在使用期间应显示一个或多个项目。 我想给它一个固定的高度(比如8个项目),并使用滚动条来查看更多的项目。在

我把代码简化为以下代码-如果你运行它,你会发现程序不符合'height=8'的要求。。。在

我错过了什么?在

#!/usr/bin/env python

from Tkinter import *
import ttk

root = Tk()
root.geometry("%dx%d+0+0" % (1420,840))
root.title("inFolder")

configtext = Text(root, width=150)
yscrollbar=Scrollbar(root, orient=VERTICAL, command=configtext.yview)
configtext["yscrollcommand"]=yscrollbar.set

auxframe=Frame(root)
chtext = Text(auxframe, width=50)
chxscrollbar=Scrollbar(chtext, orient=HORIZONTAL, command=chtext.xview)
chtext["xscrollcommand"]=chxscrollbar.set
chxscrollbar.pack(side="bottom",fill="x", expand=False)

# --------------- searchframe ----------
searchframe=Frame(auxframe)
encasef=Frame(searchframe)
encasef.pack()
sfe1 = Entry(encasef,width=30)
sfe1.pack(side=LEFT)
sfnocase = Checkbutton(encasef, text="Case")
sfnocase.pack()
sfsearchresultsbox = Listbox(searchframe,height=8)
sfsearchresultsbox.pack(fill=BOTH,expand=1)
sfsb = Scrollbar(sfsearchresultsbox, orient=VERTICAL, command=sfsearchresultsbox.yview)
sfsb.pack(side=RIGHT, fill=Y)
sfsearchresultsbox['yscrollcommand'] = sfsb.set


# GRID
auxframe.grid(column=0,row=1,sticky=E+W+S+N)       
searchframe.grid(column=0,row=1,sticky=E+W+S+N)       
chtext.grid(column=0,row=0,sticky=E+W+S+N)       
configtext.grid(column=1,row=1,sticky=E+W+S+N)                
yscrollbar.grid(column=2, row=1, sticky=N+S)

Grid.columnconfigure(root,0,weight=1)
Grid.columnconfigure(root,1,weight=0)
root.rowconfigure(1, weight=1)   
auxframe.grid_rowconfigure(0, weight=1)
auxframe.grid_columnconfigure(0, weight=1)

configtext.insert(INSERT,"test 1\ntest 2\ntest 3\ntest 4\n\ntest x\n")

#------------------------------
mainloop()

Tags: 项目columnrootpackgridrowweightsticky
1条回答
网友
1楼 · 发布于 2024-04-26 00:14:28

问题是,您正在将滚动条打包到列表框中(也包括在文本框中)。这不是你应该做的事情滚动条需要生活在他们控制的小部件之外。在

因为您将滚动条打包到列表框中,所以“打包几何体管理器”现在控制列表框的宽度和高度,使其缩小以完全适合其内容。可以关闭列表框(sfsearchresultsbox.pack_propagate(False))的几何体传播,但这不是一个正确的解决方案。真正的解决方法是将滚动条移到它们包含的小部件之外。在

除了几何问题之外,将滚动条打包到他们控制的小部件中的另一个问题是滚动条将位于小部件中的任何数据之上。例如,水平滚动条会模糊最后一条可见的线。在

如果希望滚动条显示在列表框的边框内,请将列表框的边框宽度设置为0(零),然后将列表框和滚动条放置在边框宽度为1(一)的框架内。您可以获得相同的视觉效果,而不会出现将滚动条打包到小部件中的问题。在

相关问题 更多 >

    热门问题