【发布时间】:2021-11-23 22:10:44
【问题描述】:
我是编程新手,所以我做了一个简单的在线项目并尝试使用 OOP 为它制作 GUI,你能帮我解决这个错误吗:
'RuntimeError: Too early to run the main loop: no default root window'
我把按钮拿出来让它更短:
from tkinter import *
import tkinter as tk
from tkinter import ttk
contact_list = [
['Dermot Bruce', '071 0403 6313'],
['Felix Kent', '071 7050 4862'],
['Eren Yeager', '071 4174 1560'],
['Roy Mustang' '071 5173 4259'],
['Arietta Curtis', '071 4415 8004'],
['Jennifer Love', '071 8857 1196'],
]
class address_list():
def __init__(self, *args):
self.contact = contact_list
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self, address_list)
self.title = "Address Book Interface"
self.geometry('400x400')
self.resizable(0, 0)
self.config(bg='lightblue')
self.name = StringVar()
self.number = StringVar()
# create frame
self.frame = Frame(self)
self.frame.pack(side=RIGHT)
def add_contact(contact_list):
contact_list.append([self.name.get(), self.number.get()])
select_set()
# to view selected contact(first select then click on view button
def edit(contact_list):
contact_list[Selected()] = [self.name.get(), self.number.get()]
select_set()
def view(contact_list):
NAME, PHONE = contact_list[Selected()]
self.name.set(NAME)
self.number.set(PHONE)
# to delete selected contact
def delete(contact_list):
del contact_list[Selected()]
select_set()
# empty name and number field
def reset(contact_list):
self.name.set('')
self.number.set('')
# exit game window
def exit(contact_list):
self.destroy()
def select_set(contact_list):
contact_list.sort()
select.delete(0, END)
for name, phone in contact_list:
enter
code
hereselect.insert(END, self.name)
select_set()
if __name__ == '__main__':
mainloop()
【问题讨论】:
-
要初始化 tkinter,您必须添加一个根(默认)窗口。您可以使用
root=Tk()添加它 -
@NishaniKasineshan 不,它们是从
Tk继承的,所以只需在实例上使用.mainloop() -
甚至在课堂上?我认为这被处理为 tk.Tk__init__(self) 会修复运行时错误吗?
-
而不是
mainloop()使用App().mainloop(),当然你需要先调用这个类,它不会仅仅被定义做任何事情 -
导入时不要使用
*