python - 为什么 Tkinter 在打包滚动条时会卡住?

标签 python tkinter

我正在尝试将滚动条附加到 Tkinter 中的列表框,但每当代码到达 .pack() 行之一时,它就会卡住...知道为什么吗? (我已经尝试运行一个示例代码,它执行与我在 Internet 上找到的相同的事情并且运行良好)。

        #Read Box
    self.scrollbar = Tkinter.Scrollbar(self.frame)
    #self.scrollbar.pack(side=Tkinter.RIGHT, fill=Tkinter.Y)
    self.read = Tkinter.Listbox(self.frame, width=50, yscrollcommand=self.scrollbar.set)
    self.read.grid(row=1,column=2)
    #self.read.pack(side=Tkinter.LEFT, fill=Tkinter.BOTH)
    self.scrollbar.config(command=self.read.yview)

知道为什么这段代码不起作用吗?


更新代码:

        #Read Box
    self.scrollbar = Tkinter.Scrollbar(self.frame)
    self.scrollbar2.grid(sticky=Tkinter.N+Tkinter.S) #row=1, column=2 side=Tkinter.RIGHT, fill=Tkinter.Y

    self.read = Tkinter.Listbox(self.frame, width=50, yscrollcommand=self.scrollbar.set)
    self.read.grid(row=1,column=2) #side=Tkinter.LEFT, fill=Tkinter.BOTH

    self.scrollbar.config(command=self.read.yview)

好吧,这是一个小错误(我混淆了 scrollbar 和 scrollbar2)。不管怎样,现在我有了这段代码:

        #Read Box
    self.scrollbar = Tkinter.Scrollbar(self.frame)
    self.scrollbar.grid(row=1, column=2)

    self.read = Tkinter.Listbox(self.frame, width=50, yscrollcommand=self.scrollbar.set)
    self.read.grid(row=1,column=2)

    self.scrollbar.config(command=self.read.yview)

这不会卡住并且会出现滚动条,但它们不会连接到(或无法控制)列表框。至于其余的代码,都是grid语句,没有pack。


我发现了问题,滚动条丢失了 sticky=Tkinter.N+Tkinter.S。这是完成的代码(添加了水平条)。

        #Read Box
    self.scrollbar = Tkinter.Scrollbar(self.frame)
    self.scrollbar.grid(row=1, column=3, sticky=Tkinter.N+Tkinter.S)

    self.hbar = Tkinter.Scrollbar(self.frame, orient=Tkinter.HORIZONTAL)
    self.hbar.grid(row=2, column=2, sticky=Tkinter.E+Tkinter.W)

    self.read = Tkinter.Listbox(self.frame, width=50, yscrollcommand=self.scrollbar.set, xscrollcommand=self.hbar.set)
    self.read.grid(row=1,column=2)

    self.scrollbar.config(command=self.read.yview)
    self.hbar.config(command=self.read.xview)

最佳答案

似乎您在同一级别混合 packgrid(即不在两个单独的 Frame 内,否则)。这将使您的应用卡住,如文档中所述。

所以你应该做的是 .grid 你的滚动条:-)

更多 Material :如上所述,您可以混合不同的窗口管理器,但不能在同一个框架内。以下是合法的并且可以工作:

from Tkinter import *
root = Tk()
f1 = Frame(root)
f1.pack()
Label(f1, text='some text').grid(row=0, column=0)
Button(f1, text='Button').grid(row=1, column=0)

f2 = Frame(root)
f2.pack()
Label(f2, text="content of Frame 2").pack()

root.mainloop()

关于python - 为什么 Tkinter 在打包滚动条时会卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7872534/

相关文章:

python - 使用 networkx 绘制图形时显示背景网格(也称为单元格)

Python。 Tornado 。非阻塞 xmlrpc 客户端

python - 无法在 tkinter gui 中显示多个 (JSON) "keys"

python - 在 tkinter 中单击时突出显示文本

Python 原始 IPv6 套接字错误

python - 在 Pillow 2.2.2 或 2.3.0 中使用 webp 图像

python - TypeError : a bytes-like object is required,不是 'str'

python - "AttributeError: ' 描述 ' object has no attribute ' co_button '"与 tkinter

python - 抓取 Tkinter 光标

python - 在 Tkinter 中加载 TrueType 字体文件而不将其安装在字体文件夹中