Canvas 使用python 3.2.2 tkinter,我创建了一个附带滚动条的画布,但是画布中的数据不';当我移动滚动条时,不能滚动
使用Python3.2.2 tkinter,我创建了一个带有滚动条的画布,但是当我移动滚动条时,画布中的数据不会滚动。tkinter的语法问题或错误 示例代码:Canvas 使用python 3.2.2 tkinter,我创建了一个附带滚动条的画布,但是画布中的数据不';当我移动滚动条时,不能滚动,canvas,python-3.x,tkinter,scrollbar,Canvas,Python 3.x,Tkinter,Scrollbar,使用Python3.2.2 tkinter,我创建了一个带有滚动条的画布,但是当我移动滚动条时,画布中的数据不会滚动。tkinter的语法问题或错误 示例代码: from tkinter import * ## GUI color map ### black = "#000000" root = Tk() root.minsize(100,100) root.maxsize(500,500) root.resizable(0,0) topFrame = Frame(root, bd=2,
from tkinter import *
## GUI color map ###
black = "#000000"
root = Tk()
root.minsize(100,100)
root.maxsize(500,500)
root.resizable(0,0)
topFrame = Frame(root, bd=2, relief=SUNKEN)
topFrame.pack()
xscrollbar = Scrollbar(topFrame, orient=HORIZONTAL)
xscrollbar.pack(side=BOTTOM, fill=X)
yscrollbar = Scrollbar(topFrame, orient=VERTICAL)
yscrollbar.pack(side=RIGHT, fill=Y)
conFrame = Canvas(topFrame, bd=0, scrollregion=(0, 0, 1000, 1000),
xscrollcommand=xscrollbar.set,
yscrollcommand=yscrollbar.set)
conFrame.pack(side=TOP, fill=BOTH, expand=1)
xscrollbar.config(command=conFrame.xview)
yscrollbar.config(command=conFrame.yview)
for i in range(1,30):
function_name = 'my'+str(i)+'ItemList = StringVar()'
exec(function_name)
function_name = 'my'+str(i)+'Item = '+str(i)
exec(function_name)
function_name = 'my'+str(i)+'ItemList.set(my'+str(i)+'Item)'
exec(function_name)
function_name = 'my'+str(i)+'ItemListEntry = Entry(conFrame, width=148, foreground=black, textvariable=my'+str(i)+'ItemList)'
exec(function_name)
function_name = 'my'+str(i)+'ItemListEntry.pack(side=TOP, padx=2)'
exec(function_name)
mainloop()
滚动条确实可以滚动画布。您正在创建的小部件(以非常不寻常的方式)不是画布的一部分,因此它们不会滚动。如果在画布上使用绘图命令,您将看到画布项目实际上是滚动的
为了让小部件滚动,您必须使用create\u window
将它们嵌入画布中。如果您试图创建滚动框架,典型的解决方案是将所有小部件放在一个框架中,使用create\u window
将该框架添加到画布,然后将scrollregion
设置为框架的大小(这必须在屏幕更新后进行,因为直到小部件实际呈现时才计算大小)
另一方面,为什么要使用exec?这使得您的代码极难理解,您也得不到任何回报。你知道你可以用更简单的东西来代替那10行吗?例如:
var = {}
for i in range(1,30):
var[i] = StringVar()
var[i].set(i)
e = Entry(conFrame, width=148, foreground=black, textvariable=var[i])
e.pack(side=TOP, padx=2)
工作代码示例:
from tkinter import *
## GUI color map ###
black = "#000000"
root = Tk()
root.title("Canvas Scrollbar Example")
root.minsize(100,100)
root.maxsize(500,500)
root.resizable(0,0)
topFrame = Frame(root, bd=2, relief=SUNKEN)
topFrame.pack()
xscrollbar = Scrollbar(topFrame, orient=HORIZONTAL)
xscrollbar.pack(side=BOTTOM, fill=X)
yscrollbar = Scrollbar(topFrame, orient=VERTICAL)
yscrollbar.pack(side=RIGHT, fill=Y)
canvasFrame = Canvas(topFrame, width=500, height=500, scrollregion=(0, 0, 1000, 1000),
xscrollcommand=xscrollbar.set,
yscrollcommand=yscrollbar.set)
canvasFrame.pack(side=TOP, fill=BOTH, expand=1)
xscrollbar.config(command=canvasFrame.xview)
yscrollbar.config(command=canvasFrame.yview)
entryFrame = Frame(canvasFrame, bd=2, relief=SUNKEN)
entryFrame.pack()
var = {}
for i in range(1,30):
var[i] = StringVar()
var[i].set(i)
e = Entry(entryFrame, width=148, foreground=black, textvariable=var[i])
e.pack(side=TOP, padx=2)
canvasFrame.create_window(0, 0, window=entryFrame, anchor='nw')
mainloop()
非常感谢你的帮助。我肯定错过了创建窗口。我已经实现了您的迭代代码以及创建窗口,现在我有了一个工作滚动框。