Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使主窗口的关闭按钮无法打开_Python_Python 3.x_Tkinter - Fatal编程技术网

如何在python中使主窗口的关闭按钮无法打开

如何在python中使主窗口的关闭按钮无法打开,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,当模式窗口打开时,我想使主窗口的X按钮(关闭按钮)无法启动 我试图找到我想要的答案,但是没有我想要的答案 我要强调的是,我想使主窗口的关闭按钮无法打开,而不是模式窗口(tkinter窗口) 我真的在寻找答案。 谢谢 这是我的密码 from tkinter import * from tkinter import messagebox class Gameover(object): def start(self): self.root = Tk() sel

当模式窗口打开时,我想使
主窗口的
X
按钮(关闭按钮)无法启动

我试图找到我想要的答案,但是没有我想要的答案


我要强调的是,我想使
主窗口的关闭按钮无法打开,而不是模式窗口(tkinter窗口)

我真的在寻找答案。 谢谢

这是我的密码

from tkinter import *
from tkinter import messagebox

class Gameover(object):
    def start(self):
        self.root = Tk()
        self.root.title('Gameover')

        self.lbl = Label(self.root, text = 'Enter your name')
        self.lbl.grid(row = 0)

        self.usertext = StringVar()
        self.myentry = Entry(self.root, textvariable = self.usertext)
        self.myentry.grid(row = 1, column = 0)

        self.lbl = Label(self.root, text = 'Your name's length must be shorter than 9 letters')
        self.lbl.grid(row = 2)

        self.mybutton = Button(self.root, text = 'OK', command = self.check_length, width = 10, height = 2)
        self.mybutton.grid(row = 1, column = 1)

        self.counter = 0

        self.root.mainloop()

    def check_length(self):
        if len(self.usertext.get()) < 10:
            self.printMessage()
        else:
            self.errorbox()

    def errorbox(self):
        messagebox.showinfo("Erorr", 'Your name's length must be shorter than 9 letters')

    def printMessage(self):
        global the_score, FILE_DATA

        data = [self.usertext.get(), str(the_score)]

        FILE_DATA.insert(len(FILE_DATA) - 1, data)
        FILE_DATA[len(FILE_DATA) - 2][1] = int(FILE_DATA[len(FILE_DATA) - 2][1])

        for i in range(0, len(FILE_DATA) - 1):
            for j in range(0, len(FILE_DATA) - 2 - i):
                if FILE_DATA[j][1] < FILE_DATA[j + 1][1]:
                    poped_data = FILE_DATA[j]
                    del FILE_DATA[j]
                    FILE_DATA.insert(j + 1, poped_data)

        file = open('score.txt', 'w', encoding = 'utf-8')
        for i in range(len(FILE_DATA) - 1):
            file.write('{} {}\n'.format(FILE_DATA[i][0], FILE_DATA[i][1]))
        file.close()
        sys.exit()
从tkinter导入*
从tkinter导入消息框
类Gameover(对象):
def启动(自):
self.root=Tk()
self.root.title('Gameover')
self.lbl=Label(self.root,text='输入您的姓名')
self.lbl.grid(行=0)
self.usertext=StringVar()
self.myentry=Entry(self.root,textvariable=self.usertext)
self.myentry.grid(行=1,列=0)
self.lbl=Label(self.root,text='您的姓名长度必须小于9个字母')
self.lbl.grid(行=2)
self.mybutton=Button(self.root,text='OK',command=self.check\u长度,宽度=10,高度=2)
self.mybutton.grid(行=1,列=1)
self.counter=0
self.root.mainloop()
def检查长度(自身):
如果len(self.usertext.get())小于10:
self.printMessage()
其他:
self.errorbox()
def错误框(自身):
messagebox.showinfo(“Erorr”,“您的姓名长度必须小于9个字母”)
def打印消息(自我):
全局\u分数,文件\u数据
data=[self.usertext.get(),str(分数)]
文件数据。插入(len(文件数据)-1,数据)
文件数据[len(文件数据)-2][1]=int(文件数据[len(文件数据)-2][1])
对于范围内的i(0,len(文件\u数据)-1):
对于范围(0,len(文件数据)-2-i)内的j:
如果文件数据[j][1]<文件数据[j+1][1]:
poped_数据=文件_数据[j]
del文件_数据[j]
文件数据。插入(j+1,poped数据)
文件=打开('score.txt','w',编码='utf-8')
对于范围内的i(len(文件\u数据)-1):
write('{}{}\n'.格式(文件数据[i][0],文件数据[i][1]))
file.close()文件
sys.exit()
还有更多的代码,但我想我不需要在这里写每一个代码


我想在打开此模式窗口(tkinter窗口)时关闭主窗口的按钮。

在tkinter程序中,通过定义“WM_DELETE_WINDOW”的处理程序来处理窗口框架关闭按钮。默认处理程序将退出您的程序,但如果您定义了一个不退出的处理程序,则可以忽略要退出的窗口管理器请求

#!/usr/bin/env python3

import tkinter as tk

def on_exit(label):
    label.configure(text="Not exiting")

def main():
    root = tk.Tk()
    label = tk.Label(text="")
    label.place(x=0,y=0)
    button = tk.Button(root, text="Exit", command=root.destroy)
    button.place(x=120,y=80)
    root.wm_protocol("WM_DELETE_WINDOW", lambda: on_exit(label))
    root.mainloop()

if __name__ == '__main__':
    main()

您不能删除标题栏,因为它是由操作系统处理的,但是无论何时调用它,都应该忽略close事件

def __CancelCommand(event=None): pass    
    self.top.protocol( 'WM_DELETE_WINDOW', __CancelCommand )

欢迎来到SO!为了帮助人们回答您的问题,您应该向我们提供一些背景信息。到目前为止你试过什么?如果你表现出你在这个问题上付出了一些努力,你就更有可能引发回应。此外,诸如
OMG PLEASE HELP ME
之类的评论对您的情况没有帮助。我道歉。我很生气,因为我和这件事纠缠了三天。我搜索信息,但可能我尝试了错误的方法,我找不到答案。我将编辑我的问题。您的代码中有不平衡的引号。我不知道
主窗口应该是什么,因此问题对我没有意义。谢谢。但是我想要的是控制主窗口的关闭按钮,而不是模态窗口。关于这个问题有什么答案吗?我想让主窗口的关闭按钮不能使用,或者我想忽略这个例子中的关闭命令。应用程序窗口框架上的关闭按钮由窗口管理器提供。为了传递关闭请求,窗口管理器向tkinter应用程序发布一个事件,该事件使用wm_协议wm_DELETE_窗口在tkinter代码中表示。如果你真的有别的意思,你需要用截图更好地提问。