我创建了两个小部件:一个标签和一个画布,它们位于类的内部和类的 init 方法中。出于某种原因,没有任何小部件出现,它只是给我一个空白的tkinter窗口。
def __init__ (self, master):
self.mousepos = 0,0
self.clickpos = 0,0
self.poslabel = Label(master, text = "Mouse Click: " \
+ str(self.clickpos) + "Cursor Point: "\
+ str(self.mousepos))
self.poslabel.pack()
self.fcanvas = Canvas(master,width=800,height=400, bg = 'grey90',\
borderwidth = 5, relief = RAISED)
self.fcanvas.bind("<Button-1>", self.pressButton1)
self.fcanvas.pack()
答案 0 :(得分:2)
如果这是您的所有代码,则您忘记运行根窗口的mainloop
方法。窗口绘制通过事件循环处理的事件发生;如果它没有运行,窗户就没有机会在屏幕上绘制自己。
答案 1 :(得分:2)
此处参考是您的代码的工作版本。请注意我是如何为主参数传递 root 的。另外,请注意我如何在root上使用 .mainloop()方法。
Tkinter循环运行,如果不调用 .mainloop()方法,程序将无法正常运行。
这应该有效:
from Tkinter import *
class MyWidgets :
def __init__ (self, master) :
self.mousepos = 0,0
self.clickpos = 0,0
self.poslabel = Label(master, text = "Mouse Click: " \
+ str(self.clickpos) + "Cursor Point: "\
+ str(self.mousepos))
self.poslabel.pack()
self.fcanvas = Canvas(master, width=800,height=400, bg = 'grey90',\
borderwidth = 5, relief = RAISED)
self.fcanvas.bind("<Button-1>", self.pressButton1)
self.fcanvas.pack()
def pressButton1 (self, event) :
print 'You pressed button 1!'
if __name__ == '__main__' :
root = Tk()
MyWidgets(root)
root.mainloop()