好的,所以这是来自我正在开展的一个更大的项目,所以如果它看起来很乱我会道歉。
问题是,当我单击GUI上的“退出程序”按钮时,窗口仍然处于活动状态。 我知道按钮正常工作,就像我点击窗口右上角的'x'一样;程序关闭,因此运行变量已设置回0,这将停止代码循环。
我的问题是如何在单击退出按钮时自动关闭窗口,因为root.destroy()方法没有这样做。
#imports
from tkinter import *
import random, pickle, shelve
#global vars
run = 0
class Window(Frame):
#the class that manages the UI window
def __init__(self, master, screen_type = 0):
"""Initilize the frame"""
super(Window, self).__init__(master)
self.grid()
if screen_type == 1:
self.log_in_screen()
def log_in_screen(self):
#Program Exit Button
self.exit = Button(self, text = " Exit Program ", command = self.end)
self.exit.grid(row = 3, column = 0, columnspan = 2, sticky = W)
def end(self):
global run, root
run = 0
root.destroy()
#Main Loop
def main():
global run, root
run = 1
while run != 0:
root = Tk()
root.title("Budget Manager - 0.6.1")
root.geometry("400x120")
screen = Window(root, screen_type = run)
root.mainloop()
store = shelve.open("store.dat", "c")
main()
store.close()
答案 0 :(得分:0)
我的问题是如何让窗口自动关闭 单击退出按钮,因为root.destroy()方法不是 这样做。
答案是:在根窗口调用destroy()
。你说它不起作用,但你发布的代码似乎有效,记录的destroy()
正是你所描述的想要发生的事情:它会破坏窗口。你的代码在一个循环中创建了新的顶层窗口,所以也许只有出现才能工作,因为旧的窗口id被破坏了,新的窗口是在眨眼之间创建的。
看起来你真正要问的是"我怎样才能点击" x"与单击"退出程序"相同按钮?&#34 ;.如果是这种情况,答案非常简单,即使你的非常规代码在循环中创建根窗口。
获得" x"窗口框架上的按钮用于调用函数而不是销毁窗口,使用wm_protocol
方法和"WM_DELETE_WINDOW"
常量以及您希望它调用的函数。
例如:
while run != 0:
root = Tk()
...
screen = Window(root, screen_type = run)
root.wm_protocol("WM_DELETE_WINDOW", screen.end)
...
root.mainloop()