簡體   English   中英

滾動條tkinter不滾動

[英]scroll bar tkinter not scrolling

#declare gui object and classes
app = Tk() #creates instance of Tk()
app.title('Check sort DCA') # sets title of gui
#---------------------------------------
def keepSuggested(): #button press actions 
    es.JournalOut('test2')
def UseNew():
    es.JournalOut('test1')
#------------------------------
frame=Frame(app,width=500,height=500)
frame.grid(row=0,column=0)
canvas=Canvas(frame,bg='#FFFFFF',width=500,height=500,scrollregion=(0,0,500,500))
hbar=Scrollbar(frame,orient=HORIZONTAL)
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=canvas.xview)
vbar=Scrollbar(frame,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(width=500,height=500)
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
canvas.pack(expand=True,fill=BOTH)


spacer1 = Label(canvas, text='|')
spacer2 = Label(canvas, text='|')
spacer3 = Label(canvas, text='|')
spacer4 = Label(canvas, text='|')
spacer5 = Label(canvas, text='|')

Chan_Num = Label(canvas,text='Channel Number')
Chan_Name = Label(canvas, text='Channel Name')
NewChan_Num = Label(canvas, text='New Channel Number')
Set_Title = Label(canvas, text='Set New')
std_Num=Label(canvas, text='Standard Channel Number')
std_Name = Label(canvas, text='Standard Channel Name')

Chan_Num.grid(row=0, column=0)
spacer1.grid(row=0, column=1)
Chan_Name.grid(row=0, column=2)
spacer2.grid(row=0, column=3)
NewChan_Num.grid(row=0, column=4)
spacer3.grid(row=0, column=5)
Set_Title.grid(row=0, column=6)
spacer4.grid(row=0,column=7)
std_Num.grid(row=0,column=8)
spacer5.grid(row=0,column=9)
std_Name.grid(row=0,column=10)



n=0
i = 0 # loops through all channel numbers to get print table value.
while i < nchan:  # prints out all present channels with index and channel number and title #populates tables
    ch_name = tsin.GetChanTitle(i)
    ch_num = tsin.GetChanNumber(i)


    ch_name_list = Label(canvas, text=ch_name )
    ch_num_list = Label(canvas, text=str(ch_num))



    ch_name_list.grid(row=i + 1, column=2)
    ch_num_list.grid(row=i + 1, column=0)
    UserInput=StringVar()
    EntryBox= Entry(canvas, textvariable = UserInput)
    EntryBox.grid(row=i+1,column=4 )




    i = i + 1
j=0
while j< len(CorrectChannels):
    stdList= CorrectChannels[j]
    stdListNum = j
    std_ch_num= Label(canvas,text=stdListNum+1) 
    std_ch_name = Label(canvas,text=stdList)
    std_ch_name.grid(row=j+1, column=10)
    std_ch_num.grid(row=j+1, column=8)
    j=j+1 
#build gui elements
Buttonnew = Button(canvas, text='Set Channels', bg='blue', fg='white',command=UseNew)
Buttonnew.grid(row=1, column=6)
Buttonkeep = Button(canvas, text='keep channels', bg='blue', fg='white', command=keepSuggested)
Buttonkeep.grid(row=2, column=6)





app.mainloop()

當我運行tkinter代碼python代碼時,我得到一個沒有滾動功能的滾動條,我的所有小部件都在畫布中並且可以正確顯示,但是需要向下滾動才能看到它們,此代碼生成了一個滾動條,但是沒有工作。

您的滾動條工作正常。 但是,您已將滾動區域定義為與畫布的大小完全相同。 因此,沒有任何內容可滾動。 嘗試

canvas=Canvas(frame,bg='#FFFFFF',width=500,height=500,scrollregion=(0,0,500,800))

您會看到可以向下滾動300個像素。

完整的工作示例代碼:

app = Tk()

frame=Frame(app,width=500,height=500)
frame.grid(row=0,column=0)
canvas=Canvas(frame,bg='#FFFFFF',width=500,height=500,scrollregion=(0,0,500,800))

vbar=Scrollbar(frame,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(yscrollcommand=vbar.set)
canvas.pack()

canvas.create_rectangle((200,300,300,600))

app.mainloop()

從您的評論中,我得到的印象是您正在使用grid將小部件放置在Canvas 您不應該這樣做,因為Canvas不是可以在其中grid小部件的Frame 您可以在Canvas上創建形狀,也可以創建包含小部件的窗口。 如果要使小部件網格可滾動,則應將“ Frame ”放置在“ Canvas ,而不是相反。 請參閱此答案 ,以獲取使小部件網格可滾動的絕佳示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM