2012-04-18 4 views
8

Ich habe ein Python-Codebeispiel unter Rosetta Code - eine programming chrestomathy-Site ausprobiert, in der Lösungen für die gleiche Aufgabe in so vielen verschiedenen Programmiersprachen wie möglich präsentiert werden. Ziel dieser Aufgabe ist die Eingabe einer Zeichenfolge und der Ganzzahl 75000 über die grafische Benutzeroberfläche.Fehler in einem minimalen tkSimpleDialog-Beispiel

import tkSimpleDialog 

number = tkSimpleDialog.askinteger("Integer", "Enter a Number") 
string = tkSimpleDialog.askstring("String", "Enter a String") 

aber wenn ich versuche, um den Code auszuführen, erhalte ich die folgende Fehlermeldung: Der Code ist unten dargestellt

Traceback (most recent call last): 
    File "C:\Users\vix\Documents\.cache\GUIexample.py", line 3, in <module> 
    number = tkSimpleDialog.askinteger("Integer", "Enter a Number") 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 262, in askinteger 
    d = _QueryInteger(title, prompt, **kw) 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 189, in __init__ 
    Dialog.__init__(self, parent, title) 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 53, in __init__ 
    if parent.winfo_viewable(): 
AttributeError: 'NoneType' object has no attribute 'winfo_viewable' 

Wo könnte das Problem sein?

Dank

+0

Veröffentlichen Sie die vollständige Traceback, nicht nur den Fehler. Wir müssen den Code sehen, in dem der Fehler ist. – agf

+0

@agf Ich habe die Frage bearbeitet, um das Traceback einzuschließen. – engineervix

+0

Ich benutze Python 2.7 auf Windows 7 Ultimate 32-Bit. 'root = Tkinter.tk()' funktioniert nicht, es gibt 'NameError: Name 'Tkinter' ist nicht definiert ' – engineervix

Antwort

12

Die Fehlermeldung besagt, dass der Dialog ein übergeordnetes Fenster benötigt.

Mit Python 2.x Sie das Root-Fenster erstellen mit:

import Tkinter 
root = Tkinter.Tk() 

das Root-Fenster zu verstecken, wenn Sie es nicht wollen, verwenden Sie:

root.withdraw() 

die Python Tkinter Docs Siehe Mehr Info.

+0

* T * k statt tk ... Richtige Antwort übrigens. – FabienAndre

+0

@FabienAndre Danke, behoben. – agf

1

Ich habe askinteger nie verwendet, aber von der Fehlermeldung zu urteilen sieht es aus wie der Dialog seine Eltern wissen muss, aber Sie sagen es nicht, was sollte seine Eltern sein. Versuchen Sie, parent=widget hinzuzufügen (wobei "Widget" ein Verweis auf ein anderes Widget ist - normalerweise das Stammwidget). Ich kann keine Dokumentation finden, die besagt, dass dies erforderlich ist, aber ich nehme an, dass es ist, da alle Tkinter-Widgets außer dem Stammfenster ein Elternteil haben müssen.

Wenn der Code, den Sie in Ihrer Frage anzeigen, der vollständige Code ist, fehlen Ihnen noch einige andere Dinge. Sie müssen eine Instanz der Tk Klasse erstellen (das "root" -Fenster genannt wird), und Sie müssen die Ereignisschleife starten (obwohl es möglich ist, dass der Dialog seine eigene Ereignisschleife ausführt, so dass Sie OK sein könnten, wenn Sie alles brauchen ist der einzelne Dialog).

Verwandte Themen