Python 为什么打包滚动条时Tkinter会冻结?

Python 为什么打包滚动条时Tkinter会冻结?,python,tkinter,Python,Tkinter,我试图将滚动条附加到Tkinter中的列表框,但每当代码到达.pack()行时,它就会冻结。。。知道为什么吗?(我试过运行一个示例代码,该代码与我在互联网上找到的代码相同,并且运行良好) 你知道为什么这个代码不起作用吗 更新代码: #Read Box self.scrollbar = Tkinter.Scrollbar(self.frame) self.scrollbar2.grid(sticky=Tkinter.N+Tkinter.S) #row=1, col

我试图将滚动条附加到Tkinter中的列表框,但每当代码到达.pack()行时,它就会冻结。。。知道为什么吗?(我试过运行一个示例代码,该代码与我在互联网上找到的代码相同,并且运行良好)

你知道为什么这个代码不起作用吗


更新代码:

        #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)

好吧,那是个小错误(我把滚动条和滚动条2搞混了)。无论如何,现在我有了以下代码:

        #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)
这不会冻结并显示滚动条,但它们未连接到列表框(或无法控制列表框)。至于代码的其余部分,它们都是网格语句,没有包


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


似乎您将
包装
网格
混合在同一级别(即不在两个单独的
框架
或其他框架内)。这将使您的应用程序冻结,如文档中所述

因此,您应该做的是
.grid
您的滚动条:-)

更多资料:如上所述,您可以混合使用不同的窗口管理器,但不能在同一框架内。以下内容是合法且有效的:

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()

我修改了代码,所以它没有框架的pack语句,我使用了网格,它仍然不能工作?我用self.scrollbar2.grid(row=1,column=2,side=Tkinter.RIGHT,fill=Tkinter.Y)替换了这些包。好吧,我不知道现在有什么不起作用,但我敢打赌你会遇到一些错误,比如grid:-side的
未知参数<代码>网格
使用的参数与
使用的参数不同;相当于
fill=Tkinter.Y
的是
sticky=N+S
。请您尝试一下,并发布您更新的代码好吗?
self.scrollbar2.grid(sticky=Tkinter.N+Tkinter.S)
self.scrollbar2.grid(row=1 column=2)
都会导致Tkinter冻结,如果我将它们全部更改为pack,Tkinter不会冻结,但我无法控制小部件的位置。很抱歉,现在很难说,你能在你的问题中公布你的更新代码吗?使用三个连字符进行分隔。您的代码示例没有提供足够的信息。如果代码冻结,通常意味着两件事之一:您创建了自己的无限(或长时间运行)循环,或者您正在同一容器中混合网格和包。仅凭你发布的一点点代码是不可能分辨出你的问题所在的。如果你的代码不再冻结,那么你的问题已经找到了答案!所以,如果我的答案是正确的,请接受它。关于滚动条:也许你应该使用
self.mainloop()
命令?你的答案已经被接受了。不过我已经在调用mainloop()?谢谢:-)现在关于你的新问题:我不知道
self.scrollbar.config(…)
是否正确,我一直使用
.configure
。我正在运行Python2.6,所以这可能会有所不同,但我对此表示怀疑。您能否尝试使用
self.scrollbar.configure(…)
        #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)
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()