2
我試圖在我的程序的一部分中創建滾動條。父框架有三個標籤框架小部件,其中一個需要顯示多達50個選項菜單,因此需要使用滾動條。Tkinter;在畫布中使用滾動條
我知道你不能使用滾動條來滾動標籤框架,所以在這個標籤框架中,我創建了一個可以滾動的畫布。然後我在畫布中插入了一個框架,我將使用它來顯示選項菜單。然後,我將一個滾動條連接到畫布上,並將滾動條放置在標籤框內。問題是滾動條看起來很實用,但只有前10個選項菜單是可見的,無論它滾動多少。以下是一個示例:
from Tkinter import *
app = Tk()
app.title("Example App")
app.geometry("550x400+300+300")
# Creating the first label frame
entryframe = LabelFrame(app,text="Entry",width=250,height=250)
entryframe.pack(side="top",fill=BOTH)
# Creating a frame to contain the options selected by the user; also using a canvas &
# label frame to enable the use of a scrollbar
outcomesframe = LabelFrame(app,text="User Input",width=250,height=650)
outcomesframe.pack(side="left",fill=BOTH)
outcomescanvas = Canvas(outcomesframe,relief=SUNKEN)
outcomescanvas.config(width=230,height=650)
outcomescanvas.config(scrollregion=(0,0,300,1000))
outcomescanvas.config(highlightthickness=0)
# Creating scrollbar
scrollbar = Scrollbar(outcomesframe)
scrollbar.config(command=outcomescanvas.yview)
outcomescanvas.config(yscrollcommand=scrollbar.set)
scrollbar.pack(side="right",fill=Y)
outcomescanvas.pack(side="left",expand=YES,fill=BOTH)
# Creating the frame in which the option menus will be inserted
outcomesframe2 = Frame(outcomescanvas,width=230,height=1000)
outcomesframe2.pack(side="top",fill=BOTH)
# Creating the third label frame
statsframe = LabelFrame(app,text="Third Label Frame",width=250,height=250)
statsframe.pack(side="right",fill=BOTH)
# Creating the option menus
for i in range(50):
vars()["labeltext"+str(i)] = StringVar()
vars()["labeltext"+str(i)].set("Menu"+str(i+1)+":")
vars()["label"+str(i)] = Label(outcomesframe2,textvariable=vars()["labeltext"+str(i)])
vars()["label"+str(i)].grid(row=i,column=0)
vars()["variable"+str(i)] = StringVar()
vars()["variable"+str(i)].set("Select...")
vars()["menu"+str(i)] = OptionMenu(outcomesframe2,vars()["variable"+str(i)],"Option1","Option2")
vars()["menu"+str(i)].pack()
app.mainloop()
您的代碼中存在一個錯誤。您在同一個容器小部件中使用了網格和包('resultsframe2') –
謝謝。現在修復了。 –