【问题标题】:How to add two widgets in a tk.Frame located inside a tk.Canvas?如何在位于 tk.Canvas 内的 tk.Frame 中添加两个小部件?
【发布时间】:2018-12-20 04:00:24
【问题描述】:

我正在尝试用两个按钮做一个可滚动的应用程序。按下其中一个按钮应该在框架中放置一个新按钮,并在框架内滚动小部件。

我的问题是如何将两个按钮放在框架中?

当我尝试放入同一个框架时,我只能看到一个按钮,而另一个按钮只有一小部分。
如何解决?

from tkinter import *   # from x import * is bad practice
global y
y=0
def _configure_interior(event):
    print("hola")
    size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
    canvas.config(scrollregion="0 0 %s %s" % size)

def newbutton():
    buttons=Button(interior, text="Button ")
    buttons.pack()
    #b2.place(y=50)


root =Tk()
#configuring the Scrollbars
vscrollbar = Scrollbar(root, orient=VERTICAL)
vscrollbar.pack(fill=Y, side=RIGHT)
hscrollbar = Scrollbar(root, orient=HORIZONTAL)
hscrollbar.pack(fill=X, side=BOTTOM)

#setting canvas with scrollbar
canvas = Canvas(root,height=500, width=500, bg="blue",
            yscrollcommand=vscrollbar.set,xscrollcommand=hscrollbar.set)
canvas.propagate(0)
vscrollbar.config(command=canvas.yview)
hscrollbar.config(command=canvas.xview)
canvas.pack()

#making a interior scrolleable frame
interior = Frame(canvas,bg='black',height=600,width=600)
interior.pack(side="top", fill="both", expand=True)

#adding some widgets to the Frame
b=Button(interior, text="Button 2",command=newbutton)
b.pack()
b2=Button(interior, text="Button 2",command=newbutton)
b2.pack()
b2.place(x=50,y=50)

interior_id = canvas.create_window(30,30, window=interior,
                                 anchor=NW)
interior.bind('<Configure>', _configure_interior)
root.mainloop()

【问题讨论】:

    标签: python canvas tkinter scrollbar frame


    【解决方案1】:

    您还使用pack()interior 框架放置在画布上,这不起作用。我已经在下面的代码中注释了该行。我还注释掉了b2.place(),因为您不应该在框架中使用超过一个几何管理器。

    #making a interior scrolleable frame
    interior = Frame(canvas,bg='black',height=600,width=600)
    #interior.pack(side="top", fill="both", expand=True)
    interior_id = canvas.create_window(30,30, window=interior,
                                     anchor=NW)
    
    #adding some widgets to the Frame
    b=Button(interior, text="Button 2",command=newbutton)
    b.pack()
    b2=Button(interior, text="Button 2",command=newbutton)
    b2.pack()
    #b2.place(x=50,y=50)
    

    新按钮现已打包到interior

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2020-09-28
      • 2019-11-09
      相关资源
      最近更新 更多