第一次在stackexchange上 所以我从一个月前开始自学自编程序,进行得非常慢。 我遇到过很多问题,因为我一直在努力学习它,只是在网上随便学习一遍,甚至没有看到任何书或任何东西,通过自我体验学习并试图构建“项目”(占用这么多时间做简单的事情)。当画布被网格化时,Python Tkinter画布形状不显示,但是在包装时做?
无论如何,我遇到了很多问题,我最终解决了这些问题,占用了很多时间。我绕过了一些问题,不知道出了什么问题,但要牢记在那个领域的某些事情确实出错了。
好了,我已经决定,我无法排序的任何问题,我可以在这里问。所以这里有一个简单的一个,我不能完全围绕让我的头:
from Tkinter import *
root = Tk()
backgroundCanvas = Canvas(root)
backgroundCanvas.grid(row = 0, column = 0, sticky = N+S+E+W)
#backgroundCanvas.pack(fill = BOTH, expand = True)
margin= 20
padding = 10
cellWidth = 100
cellHeight = 130
xypos = [ ]
xdif = cellWidth + 2*padding
ydif = cellHeight + 2*padding
for i in range(4):
for j in range(4):
a = margin+padding+i*xdif
b = margin+j*ydif
xypos.append((a,b,a+cellWidth,b+cellHeight))
for xpos1,ypos1,xpos2,ypos2 in xypos:
backgroundCanvas.create_rectangle((xpos1,ypos1),(xpos2,ypos2), fill = "blue")
print xpos1,ypos1,xpos2,ypos2
root.mainloop()
对不起,不包括图片,但如果我网,它只是对“第一”行创建3米完整的矩形,并然后在“第二”行(不是行网格,这只是一个块,第0行,第0列)上另外三个半切矩形。但是,如果我打包它,它会正确显示,显示所有16个矩形。
预先感谢您花时间阅读本文,我知道这有点不清楚!
编辑:另一个问题(我知道我应该问另一篇文章,但这是一个规模较小的问题),说我有四个画家与他们的父母作为根。他们的名字如下:
firstCanvas = Canvas(root)
secondCanvas = Canvas(root)
thirdCanvas = Canvas(root)
fourthCanvas = Canvas(root)
并说我已经打包/网格化他们所有或whatnot。现在我想将我的鼠标移到每个人身上。我做的: firstCanvas.bind( “” 的mousePressed) fourthCanvas.bind( “” 的mousePressed)
等等,但如果我有10个画布,将我必须手动粘贴该行10他们?我可以创建一个将它们整齐地绑定在一起的循环吗?这里的问题是,我不能在[first,second,third ...]中为数字说数字+ Canvas.bind ...等,因为它不能像那样工作。未定义的许多事情不说,它只是不起作用。
使用字符串绕过它不起作用,因为firstCanvas不是字符串,它实际上是一个指向画布的“变量”。
我做了很多次的解决方法是创建一个字典,他们在那里使用可以是变量的字符串。例如,对于[first,...]中的数字,canvas_data [“%d”%(number)+ Canvas] = do_your_thing_here,这是有效的,但它不是很优雅。
更不用说我甚至不确定使用一个字典变量分配给tkinter中的实际Canvas实际上工作(还没有尝试过)。如果是这样,那么我可以这么做......说 canvas_data [firstCanvas] .bind(“”,mousePressed)。
但是,这是在旁边,我正在寻找另一种方式来做到这一点,无论如何“改变”不是字符串的字符?
另一种方式把它,我有变量称为variableA的,variableB的variableC 我想这样做(2例):上
for letter in [A,B,C]:
variable+letter = letter
varA = 1, varB = 2, varC = 3
for letter in [A,B,C]:
print var+letter.
我希望我足够清楚...任何帮助这件事情会很好。
我明白了!感谢您提供字典命名技巧,这非常整齐。至于网格,我实际上忘记了加重列,但即使在我做了之后,它也不起作用。我认为我加权backgroundCanvas而不是根,你的代码做的伎俩! – Taiga
在其他GUI框架中,您会看到像'root.add_to_grid(backgroundCanvas,column = 0,sticky = ...)'代替'backgroundCanvas.grid(...)'的东西,并且您将知道哪个小部件管理的网格和在哪里使用'grid_rowconfigure(...)':) – furas