我正在学习Tkinter并制作一个简单的8字谜游戏。
(示例:http://www.permadi.com/java/puzzle8/)
每个数字都是一个画布对象,使用网格布局放置在框架中。其中一个对象是在画布对象之间添加额外的填充。我将Canvas对象的border width设置为-2,这解决了一些人的问题,但这只是稍微减少了我的额外填充。将此值设置为-4将开始切割画布区域。在
我假设网格布局的单元格有一些默认的填充或边框宽度,但是我没有找到一种方法来删除它。在画布对象上调用grid()时设置padx、pady、ipadx、ipady值似乎也没有帮助。在
我发现的另一个奇怪之处是,当我为画布对象制作边框时,我使用create_rectangle,但是我必须从4,4开始x_1和y_1,而不是0,0或2,2,这是我期望的2px边框。在
这是我的密码。如有任何帮助/建议/解决办法/其他,我们将不胜感激。在
#!/usr/bin/python
from Tkinter import *
class Number(Canvas):
def __init__(self, master=None, number=1):
Canvas.__init__(self, master, width=100, height=100, bd=-2)
self.create_text(50, 50, text=str(number), anchor=CENTER)
self.create_rectangle(4, 4, 98, 98, width=2)
class Application(Frame):
def create_widgets(self):
self.playarea = Frame(self, width=300, height=300)
self.playarea.grid_propagate(0)
self.playarea.grid()
self.playarea.numbers = []
for number in xrange(1, 10):
num_obj = Number(self.playarea, number)
self.playarea.numbers.append(num_obj)
row = number // 3
col = number % 3
num_obj.grid(row=row, column=col)
def __init__(self, master=None):
Frame.__init__(self, master)
self.grid()
self.create_widgets()
def main():
app = Application()
app.master.title("Sample Application")
app.mainloop()
if __name__ == '__main__':
main()
最有可能的原因是您忽略了将每个画布的
highlightthickness
属性设置为零。这个值控制小部件周围的一个彩色环,用来表示它有焦点。在在试图解决这些类型的布局问题时,这里有一个窍门:给每个小部件一种不同的背景颜色(即:根窗口一种颜色,内部框架一种颜色,画布一种颜色)。然后,您可以使用这些颜色作为向导,查看哪些小部件拥有您要消除的空间。在
相关问题 更多 >
编程相关推荐