2015-02-04 3 views
0
#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 код кода питона я полоса прокрутки без возможности прокрутки, все моих виджетов в полотне и отображаются правильно, однако прокрутки необходима для прокрутки вниз, чтобы увидеть их все , этот код создает полосу прокрутки, но она не работает.полоса прокрутки Tkinter не прокрутка

ответ

4

Ваша полоса прокрутки отлично работает. Тем не менее, вы определили scrollregion точно так же, как размер холста. Поэтому нечего прокручивать. Попробуйте

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 не является Frame, в котором вы можете grid виджетов. Вы можете создавать фигуры на Canvas или создавать окно, содержащее виджеты. Если вы пытаетесь прокрутить сетку виджета, вы должны поместить Frame на Canvas, а не наоборот. См. this answer - отличный пример создания сетки виджета, прокручиваемой.

+0

Привет, спасибо, это имеет смысл, однако это не исправляет мою проблему, поэтому сама полоса прокрутки 800 пикселей, однако виджеты сетки, которые у меня на моем холсте, просто переполняют высоту страницы http://imgur.com/J4nwG2W <- см. –

+0

Используя точный код, который я только что опубликовал, это не то, что происходит для меня. Но вы говорите, что используете сетку для размещения виджетов на холсте? – fhdrsdg

+0

Да, это работает неправильно? Я посмотрю на этот результат, я видел это раньше, должен был убежать от меня, что он был полезен, благодаря тому, что так много для вашей помощи, я должен поместить свою сетку в свой кадр, а затем мой кадр на моем холсте? Просто заменил все мои ссылки на холсты ссылками на фреймовые ссылки, и он сработал, когда я нажал кнопку запуска для справки Я разрабатываю приложение в glyphworks, которое является частью nCode –

Смежные вопросы