首页 > 解决方案 > Python 使用 self.root.protocol("WM_DELETE_WINDOW", event) 禁用“X”按钮在类中不起作用

问题描述

所以首先:我基本上是一个编程菜鸟,我真的不知道如何解决这个“错误”。我在一个简单的测试程序中尝试过这个并且它有效但是当我尝试将它放入我的面向对象编程类时它根本不起作用。如果有人知道解决方案,请告诉我我做错了什么以及为什么它不起作用。(代码本身有效,我没有在这里复制整个代码,因为它不会参与解决方案(我猜))问候!

class GUI(object):
 def __init__(self):
      self.root = Tk()
      self.root.protocol("WM_DELETE_WINDOW", exit)
      """
      self.root.geometry(str(self.root.winfo_screenwidth())//2 +
                         "x" +
                         str(self.root.winfo_screenheight())//2)
      """

      self.xSize = 415
      self.ySize = 570
      self.root.geometry(str(self.xSize) +
                         "x" +
                         str(self.ySize)) # Fenstergröße

      self.root.title("P+R Anwesenheit") # Fenstername

      self.root.iconbitmap("icon.ico") # Fenstericon

      self.root.resizable(False, False) # Sperren der Fenstergröße

      #self.root.overrideredirect(True)


      self.pixelVirtual = PhotoImage(width=1, height=1) #Dazu da um Widgetgrößen in Pixel angeben zu können


      self.kalenderWoche = datetime.date(time.localtime()[0], time.localtime()[1], time.localtime()[2]).isocalendar()[1] # Kalenderwoche des aktuellen Tages
      self.groupMode = 2 # 1: Füllen bis zum unteren Rand/ 2: Gleichmäßige Aufteilung (auf 2 Reihen)
      self.namenNachnamenListe = listeAuslesen() #Liste der NACHNAMEN aller Mitarbeiter aus mitarbeiter.txt
      self.mitarbeiterListe = self.namenNachnamenListe[0] #Einlesen der Mitarbeiter aus mitarbeiter.txt
      self.aktiveLabelListe = [] #Liste der Anwesenheitsanzeigenden Label
      self.aktiveNamenLabelListe = [] #Liste der Namenslabel der Mitarbeiter
      self.labelErstellen = self.labelErstellen() #Aufruf der Methode um alle Labels der GUI zu erstellen
      self.buttonsErstellen = self.buttonsErstellen() #Aufruf der Methode um Button zu erstellen
      self.namenListe = [] #Fix-Textdateien-Liste
      self.buttonState = False #Vergrößern/-kleinern Button Status
      self.loginLogs = loginLogsTxt
      self.monatsListe = ["Januar", "Februar", "März",
                          "April", "Mai", "Juni",
                          "Juli", "August", "September",
                          "Oktober", "November", "Dezember"]

      #Fix für den Fall von Mitarbeitern mit gleichem Nachnamen (oder teilweise gleichem Nachnamen)
 
      for i in self.namenNachnamenListe[1]:
           self.namenListe.append(open(pathAnwesenheitsauslese+"\\"+i+"Logoff.txt", "w+"))
      for i in self.namenListe:
           i.close()
           
           
      self.fixDeleted = False #Fix angewendet/oder nicht

      #Binding

      self.root.bind('<Double-Button 1>', self.changeSize2)

 def exit(self):
      pass


 def destroyWindow(self):
      copy2("loginLogs.txt", "logs" + "/" + "loginLogs"+str(time.localtime()[2])+";"+str(time.localtime()[1])+";"+str(time.localtime()[0])+".txt")
      loginLogsTxt.close()
      os.remove("loginLogs.txt")
      self.root.destroy()
      .
      .
      .

标签: pythontkinter

解决方案


推荐阅读