Я написал немного кода, и я не могу, поскольку жизнь меня выясняет, почему это не работает. Я пытаюсь создать кадр с полосой прокрутки с динамическим содержимым, но по какой-то причине полоса прокрутки не будет прокручиваться.Tkinter dynamic «iframe» не будет прокручиваться
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()
scrolledframe не то, что я написал сам, но здесь это в любом случае:
from Tkinter import *
class VerticalScrolledFrame(Frame):
"""A pure Tkinter scrollable frame that actually works!
* Use the 'interior' attribute to place widgets inside the scrollable frame
* Construct and pack/place/grid normally
* This frame only allows vertical scrolling
Assuming this is Public domain, but it's from here: http://tkinter.unpythonic.net/wiki/VerticalScrolledFrame
"""
def __init__(self, parent, *args, **kw):
Frame.__init__(self, parent, *args, **kw)
# create a canvas object and a vertical scrollbar for scrolling it
vscrollbar = Scrollbar(self, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
canvas = Canvas(self, bd=0, highlightthickness=0,
yscrollcommand=vscrollbar.set)
canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
vscrollbar.config(command=canvas.yview)
# reset the view
canvas.xview_moveto(0)
canvas.yview_moveto(0)
# create a frame inside the canvas which will be scrolled with it
self.interior = interior = Frame(canvas)
interior_id = canvas.create_window(0, 0, window=interior,
anchor=NW)
# track changes to the canvas and frame width and sync them,
# also updating the scrollbar
def _configure_interior(event):
# update the scrollbars to match the size of the inner frame
size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
canvas.config(scrollregion="0 0 %s %s" % size)
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the canvas's width to fit the inner frame
canvas.config(width=interior.winfo_reqwidth())
interior.bind('<Configure>', _configure_interior)
def _configure_canvas(event):
if interior.winfo_reqwidth() != canvas.winfo_width():
# update the inner frame's width to fill the canvas
canvas.itemconfigure(interior_id, width=canvas.winfo_width())
canvas.bind('<Configure>', _configure_canvas)
return
Любые подсказки? (я знаю, что это некрасиво код, но это лишь доказательство концепции)
Я заметил, что сама полоса прокрутки прокручивается, но кнопки этого не делают, может быть, вы не добавляете кнопки, где вы думаете? –