python - 在 python tkinter 中销毁 GUI 窗口
问题描述
我是 python 开发的新手,并开始从此链接学习多客户端、服务器 开发。我想通过添加一个关闭按钮而不是窗口提供的关闭按钮来调整这个应用程序。
# GUI class for the chat
class GUI:
# constructor method
def __init__(self):
# chat window which is currently hidden
self.Window = Tk()
self.Window.withdraw()
# login window
self.login = Toplevel()
# set the title
self.login.title("Login")
self.login.resizable(width=False,
height=False)
self.login.configure(width=400,
height=300)
# create a Label
self.pls = Label(self.login,
text="Please login to continue",
justify=CENTER,
font="Helvetica 14 bold")
self.pls.place(relheight=0.15,
relx=0.2,
rely=0.07)
# create a Label
self.labelName = Label(self.login,
text="Name: ",
font="Helvetica 12")
self.labelName.place(relheight=0.2,
relx=0.1,
rely=0.2)
# create a entry box for
# tyoing the message
self.entryName = Entry(self.login,
font="Helvetica 14")
self.entryName.place(relwidth=0.4,
relheight=0.12,
relx=0.35,
rely=0.2)
# set the focus of the curser
self.entryName.focus()
self.name = self.entryName.get()
# create a Continue Button
# along with action
self.go = Button(self.login,
text="CONTINUE",
font="Helvetica 14 bold",
command=lambda: self.goAhead(self.entryName.get()))
self.go.place(relx=0.4,
rely=0.55)
self.Window.mainloop()
def goAhead(self, name):
self.login.destroy()
self.layout("Client chat")
# The main layout of the chat
def layout(self, name):
self.name = name
# to show chat window
self.Window.deiconify()
self.Window.title(self.name)
self.Window.resizable(width=False,
height=False)
self.Window.configure(width=470,
height=550,
bg="#17202A")
self.labelHead = Label(self.Window,
bg="#17202A",
fg="#EAECEE",
text=self.name,
font="Helvetica 13 bold",
pady=5)
self.labelHead.place(relwidth=1)
self.line = Label(self.Window,
width=450,
bg="#ABB2B9")
self.line.place(relwidth=1,
rely=0.07,
relheight=0.012)
self.textCons = Text(self.Window,
width=20,
height=2,
bg="#17202A",
fg="#EAECEE",
font="Helvetica 14",
padx=5,
pady=5)
self.textCons.place(relheight=0.745,
relwidth=1,
rely=0.08)
self.labelBottom = Label(self.Window,
bg="#ABB2B9",
height=80)
self.labelBottom.place(relwidth=1,
rely=0.825)
# create a Send Button
self.buttonMsg = Button(self.labelBottom,
text="Close",
font="Helvetica 10 bold",
width=20,
bg="#ABB2B9",
command=lambda: self.closeConnection())
self.buttonMsg.place(relx=0.50,
rely=0.008,
relheight=0.06,
relwidth=0.22)
self.selectbuttonMsg = Button(self.labelBottom,
text="Select",
font="Helvetica 10 bold",
width=20,
bg="#ABB2B9",
command=lambda: self.readFile())
self.selectbuttonMsg.place(relx=0.25,
rely=0.008,
relheight=0.06,
relwidth=0.22)
self.textCons.config(cursor="arrow")
# create a scroll bar
scrollbar = Scrollbar(self.textCons)
# place the scroll bar
# into the gui window
scrollbar.place(relheight=1,
relx=0.974)
scrollbar.config(command=self.textCons.yview)
self.textCons.config(state=DISABLED)
我添加了按钮并添加了名为 closeConnection 的函数。我使用了所有可能的东西,用户界面卡住了,但窗口没有关闭。
def closeConnection(self):
quit()
self.Window.quit()
self.Window.destroy()
我试图弄清楚但不明白我在哪里失踪。是由于线程还是由于窗口去图标化的东西,或者我不了解窗口层次结构。
提前致谢。
解决方案
我认为您必须使用此命令才能关闭窗口:self.root.destroy()
推荐阅读
- node.js - Nodejs:避免在 fs.createWriteStream 函数中自动添加反斜杠
- c# - 如何将视图模型中的属性数据绑定到 WPF 中的自定义用户控件?
- c# - 通过继承创建一个懒惰和一个渴望的 DbContext?
- php - 在laravel中添加列时未定义的变量
- php - 如何解决 HTTP 错误 500.19 - laravel 的 IIS 10.0 中的内部服务器错误 0x8007000d
- sql-server - 仅当 state_desc 为 ONLINE 时为每个 DB 运行特定的 sql
- r - 为 R 网页设置传单的标题
- audio - ffmpeg AAC 音频编码与 libfdk_aac:-q:a 和 -vbr 质量参数之间的区别?
- sql-server - 如何根据选择中的两列添加计数以及更多列
- java - 如何从日期格式中获取最低计时单位?