2016-04-05 3 views
2

Ich versuche, eine ttk calendar in meine Tkinter GUI hinzuzufügen. Das Problem ist, dass es _tkinter.TclError: can't pack .34164128 inside .34161248.34161448.34161608 wirft_tkinter.TclError: kann nicht packen, wenn ich ttkcalendar in tkinter GUI hinzufügen möchte

import Tkinter 
import tkSimpleDialog 

import ttkcalendar 


class CalendarDialog(tkSimpleDialog.Dialog): 
    """Dialog box that displays a calendar and returns the selected date""" 

    def body(self, master): 
     self.calendar = ttkcalendar.Calendar(master) 
     self.calendar.pack() 

    def apply(self): 
     self.result = self.calendar.selection 


# Demo code: 
def main(): 
    root = Tkinter.Tk() 
    root.wm_title("CalendarDialog Demo") 

    def onclick(): 
     print 'click' 

    cd = CalendarDialog(root) 
    button = Tkinter.Button(root, text="Click me to see a calendar!", command=onclick) 
    button.pack() 
    root.update() 

    root.mainloop() 


if __name__ == "__main__": 
    main() 


TRACEBACK: 
    File "C:/Users/Milano/PycharmProjects/MC/plots/ds.py", line 32, in <module> 
    main() 
    File "C:/Users/Milano/PycharmProjects/MC/plots/ds.py", line 23, in main 
    cd = CalendarDialog(root) 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 64, in __init__ 
    self.initial_focus = self.body(body) 
    File "C:/Users/Milano/PycharmProjects/MC/plots/ds.py", line 9, in body 
    self.calendar = ttkcalendar.Calendar(master) 
    File "C:\Users\Milano\PycharmProjects\MC\plots\ttkcalendar.py", line 52, in __init__ 
    self.__place_widgets()  # pack/grid used widgets 
    File "C:\Users\Milano\PycharmProjects\MC\plots\ttkcalendar.py", line 110, in __place_widgets 
    self._calendar.pack(in_=self, expand=1, fill='both', side='bottom') 
    File "C:\Python27\lib\lib-tk\Tkinter.py", line 1940, in pack_configure 
    + self._options(cnf, kw)) 
_tkinter.TclError: can't pack .34164128 inside .34161248.34161448.34161608 

Wissen Sie, wo ist das Problem?

+0

Würden Sie eine Sache tun? Füge diesen Code einfach an das Ende deiner Datei an: 'print (root); Drucken (Knopf); drucken (cd) '. Führen Sie die Datei erneut aus. Fügen Sie diese Daten zusammen mit dem Traceback hinzu, den Sie erneut erhalten. Ich bin sicher, das wird uns helfen. – TheRandomGuy

+0

Ich kann diesen Code nicht an das Ende der Datei setzen. Davor wird der Fehler ausgelöst. Aber ich habe ttkcalendar Instanz und Knopf so geschaltet, dass ich mindestens root und button drucken kann und das Ergebnis ist:. (Punkt) und .33256272 –

+1

So jetzt wissen Sie, dass der Fehler in der 'ttkcalendar'-Instanz ist. Ich denke, dass der Fehler darin besteht, dass Sie keine "__init__" -Methode haben. Versuchen Sie, "body" als "__init__" umzubenennen. (Doppelunterstriche.) – TheRandomGuy

Antwort

2

Der Fehler ist, dass Sie keine __init__ Methode in der Klasse CalendarDialog haben. Benennen Sie die Methode body einfach in __init__ um. Jetzt haben Sie die Instanz jedes Mal initialisiert, wenn Sie eine Instanz erstellt haben und eine pack()-Methode definiert ist.

Verwandte Themen