Tkinter dynamic“iframe”不会

2024-09-29 01:36:43 发布

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

我写了一点代码,但我做不到,因为我的一生都在想它为什么不起作用。我试图用动态内容的滚动条制作一个框架,但是由于某些原因,滚动条无法滚动。在

import scrolledframe
from Tkinter import *

class app(Tk):
    def __init__(self, parent):
        Tk.__init__(self, parent)
        self.parent=parent
        self.initialize()
        populateinterior(self.sframe.interior)
    def initialize(self):
        self.grid()
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0,weight=1)
        self.resizable(True,True)
        self.sframe = scrolledframe.VerticalScrolledFrame(self)
        self.sframe.grid()

def OnButtonClick():
        appinstance.sframe.interior.buttons.append(Button(appinstance.sframe.interior, text=u'Click meh!',command=OnButtonClick))
        appinstance.sframe.interior.buttons[-1].grid(row=len(appinstance.sframe.interior.buttons)+1,column=0)
def populateinterior(self):
        self.grid()
        self.buttons=[]

        self.buttons.append(Button(self, text=u'Click meh!',command=OnButtonClick))
        self.buttons[-1].grid(row=len(self.buttons)+1,column=0)

if __name__=="__main__":
    appinstance=app(None)
    appinstance.title("All dem appz belong to meh")
    appinstance.mainloop()

滚动框不是我自己写的,但不管怎么说,它是这样的:

^{pr2}$

有什么线索吗? (我知道这是丑陋的代码,但这只是概念的证明)


Tags: 代码importselfappdeftkgridparent
1条回答
网友
1楼 · 发布于 2024-09-29 01:36:43

问题是populateinterior中的第一行:

def populateinterior(self):
    self.grid()
    ...

在此上下文中,self是滚动框架的内部小部件。您正在对它调用grid,这不应该这样做。内部框架不得在帆布内包装、放置或网格。相反,它必须是使用canvas方法create_window(由VerticalScrolledFrame类处理)创建的canvas对象。当您在内部框架上调用grid时,您正在破坏画布和框架之间的连接。在

相关问题 更多 >