【发布时间】:2015-10-28 02:49:23
【问题描述】:
我正在尝试使用 Tkinter 练习制作画布,但我无法使用 for 循环使标签出现在画布上。假设我有一个如下所示的列表:
cities = ["Boston","New York","Chicago","Munich","Berlin","Monterrey"]
我想要一个遍历每个城市的 for 循环,然后在画布上的某处放置一个带有每个城市名称的标签。到目前为止我有这个代码(只显示一个画布,不能让它显示标签):
class Map_Window(Frame):
def __init__(self,title,left,top,width,height,master):
Frame.__init__(self,master)
self.master.title(title)
self.master.geometry("%dx%d+%d+%d" % (width,height,left,top))
self.create_gui()
self.pack()
def create_gui(self):
self.frm1 = Frame(self)
self.canvas = Canvas(self.frm1)
self.canvas.pack()
self.frm1.pack()
该代码将设置画布。现在我正在尝试创建将列表中的内容放置在画布内的类。到目前为止我有这个:
class Controller:
def __init__(self, canvas):
self.canvas = canvas
def draw_map(self,city_list):
for l in city_list:
lbl = Label(self.canvas,text = l).place(x = 1,y = 1)
lbl.pack()
代码主要部分:
top_level = Tk()
win = Map_Window("Locations",150,150,300,400,top_level)
drawer = Controller(win.canvas)
drawer.draw_map(cities)
top_level.mainloop()
如上所述,我可以让画布正确显示,但没有标签。
【问题讨论】:
-
为什么不能显示标签?您正在尝试什么,以及您未预料到的情况?你有错误吗?如果是这样,有什么错误?当您说“标签”时,您指的是
Label小部件,还是直接放置在画布上的简单文本字符串? -
@BryanOakley 抱歉不清楚,我的意思是标签小部件。我没有收到任何错误,只是没有出现。
-
向我们展示您的尝试。如果您不向我们展示您是如何将它们添加到画布中的,我们无法说明它们为什么不显示。
-
我在“for l in city_list”循环中添加了几行代码,显示了我尝试的最后一件事。
-
在 Controller 类中打印 lbl。这是 place 返回的内容,因此 lbl.pack() 的结果是未知的,因为您没有在该行收到错误消息。另请注意,下一个标签放置在前一个标签顶部的相同位置。最后,看看effbot.org/tkinterbook/canvas.htm和java2s.com/Tutorial/Python/0360__Tkinker/AddLabeltocanvas.htm的create_text和create_window
标签: python canvas tkinter tkinter-canvas