我正在玩弄Tkinter窗口小部件,并试图将滚动条应用到画布窗口小部件,但是当程序运行时会挂起 - 没有错误消息等。将滚动条应用到Tkinter中的画布窗口小部件的问题
首先是附加滚动条的一般逻辑好吗?
其次,问题似乎与.pack()
方法一样,因为删除它可以让程序运行。正如我已经使用.grid()
方法,否则这意味着我必须使用滚动的.grid()
方法?如果是的话,如何实现这一目标?任何帮助实现这一目标都将受到极大的重视。预先感谢您的时间。
from tkinter import *
x = 10
y = 10
a = 100
b = 100
def change_coord(event):
global coord
if event.keysym == 'Up':
coord[1] -=1
coord[3] -=3
if event.keysym == 'Down':
coord[1] +=1
coord[3] +=3
if event.keysym == 'Right':
coord[0] +=1
coord[2] +=3
if event.keysym == 'Left':
coord[0] -=1
coord[2] -=3
canvas1.coords(arc, *coord)
window = Tk()
window.geometry("500x500")
#canvas scroll bar
scrollbar = Scrollbar(window)
scrollbar.pack(side=RIGHT, fill=Y)
#canvas and drawing
canvas1=Canvas(window, yscrollcommand=scrollbar.set, height = 200, width = 400)
canvas1.grid(row=0, column=0, sticky=W)
coord = [x, y, a, b]
arc = canvas1.create_rectangle(*coord, outline="#fb0", fill="#fb0")
#canvas scrollbar continued
scrollbar.config(command=canvas1.yview)
#captureing keyboard inputs and assigning to function
window.bind_all('<Up>', change_coord)
window.bind_all('<Down>', change_coord)
window.bind_all('<Left>', change_coord)
window.bind_all('<Right>', change_coord)
window.mainloop()
另外,我看到,当我使用.pack()
方法放置在画布上的程序运行窗口,滚动条是可见的,但滚动条不实际工作。任何有关这个问题的帮助都会非常受欢迎。谢谢。
为什么_are_使用'grid',而不是'pack'为'canvas1'? – abarnert 2014-09-28 11:02:35
此代码取自所有添加的小部件已使用网格方法组织的代码的较大部分。 – sw123456 2014-09-28 11:03:49
从http://effbot.org/tkinterbook/grid.htm:警告:切勿在同一个主窗口中混合网格和包。顺便说一句,对我来说,这有些作用(用“包”的画布)。我有一个滚动条,可以通过单击上/下框来移动框。然而,酒吧本身则充满了整个垂直空间。 – Jasper 2014-09-28 12:24:00