【发布时间】:2014-05-07 02:20:06
【问题描述】:
我是 Stack Overflow 的新成员。 我找到了这个帖子,但不允许对此发表评论或提问,所以我想我只是在这里引用它:How can I make a in interactive list in Python's Tkinter complete with buttons that can edit those listings?
from tkinter import *
import os
import easygui as eg
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
# character box
Label(frame, text = "Characters Editor").grid(row = 0, column = 0, rowspan = 1, columnspan = 2)
charbox = Listbox(frame)
for chars in []:
charbox.insert(END, chars)
charbox.grid(row = 1, column = 0, rowspan = 5)
charadd = Button(frame, text = " Add ", command = self.addchar).grid(row = 1, column = 1)
charremove = Button(frame, text = "Remove", command = self.removechar).grid(row = 2, column = 1)
charedit = Button(frame, text = " Edit ", command = self.editchar).grid(row = 3, column = 1)
def addchar(self):
print("not implemented yet")
def removechar(self):
print("not implemented yet")
def editchar(self):
print("not implemented yet")
root = Tk()
root.wm_title("IA Development Kit")
app = App(root)
root.mainloop()
有人能解释一下为什么最后一行是 root.mainloop() 吗? 作为一名 Python 新手,并且来自面向过程且没有面向对象经验的背景,我会认为应该是 app.mainloop()。
实际上 app = App(root) ,app 不会在其余代码中再次使用!我无法理解为什么 root.mainloop() 仍然有效。
【问题讨论】:
-
所以当你用
root初始化你的App类时,__init__函数运行,所有的GUI组件都被加载。mainloop是Tk的一个方法,它启动窗口的事件循环。因此,我们不需要重新引用class(虽然技术上我们这样做,在class本身内部),因为我们需要在初始化class时完成。