Python Tkinter: Hinzufügen von Widgets zu Datei-Dialogen

Ich verwende Tkinter mit Python 2.6 und 2.7 für die Programmierung von grafischen Benutzeroberflächen.

Diese User Interfaces enthalten Dialoge zum Öffnen von Dateien und Speichern von Daten aus dem Modul tkFileDialog . Ich möchte die Dialoge anpassen und einige weitere Eintragswidgets hinzufügen, zB um den Benutzer Kommentare hinterlassen zu lassen.

Gibt es eine Möglichkeit dafür?

Es scheint, dass die Datei-Dialoge direkt aus dem Betriebssystem genommen werden. In Tkinter sie aus der Dialog-Klasse im tkCommonDialog Modul abgeleitet und rufen die Methode tk.call("tk_getSaveFile") eines Frame-Widget auf (in diesem Fall zum Speichern von Daten).

Ich konnte nicht herausfinden, wo diese Methode definiert ist.

2 Solutions collect form web for “Python Tkinter: Hinzufügen von Widgets zu Datei-Dialogen”

call Methode ist in _tkinter.c definiert, aber es gibt nichts Interessantes für Ihre besondere Aufgabe dort. Es ruft nur einen Tcl-Befehl an und der Befehl tk_getSaveFile macht die ganze Arbeit.

Und ja, wenn es einen nativen tk_getSaveFile auf dem Betriebssystem gibt, verwendet tk_getSaveFile sie (zB GetSaveFileName wird unter Windows verwendet). Es könnte möglich sein, Widgets dort hinzuzufügen, aber nicht ohne Manipulation mit C-Quellen von Tk. Wenn Sie sicher sind, dass Ihr Ziel nicht-native Tk-Dialoge verwendet, können Sie etwas hinzufügen, um seine Widget-Hierarchie durch Hacking ::tk::dialog::file:: procedure von Tk (siehe library/tkfbox.tcl ).

Ich würde lieber eine alternative Implementierung von tk_getSaveFile , geschrieben in reinen Tcl / Tk und nie mit der OS-Anlage. Auf diese Weise können wir sicher sein, dass sein Layout für alle Betriebssysteme gleich ist, und es wird sich nicht plötzlich mit einer neuen Version von Tk ändern. Es ist noch weit von trivial, um eine bequeme API für Python um es zu bieten, aber zumindest ist es möglich.

Ich musste die canvasx / y Aussagen loswerden. Diese Zeile liest nun einfach set item [$data(canvas) find closest $x $y] , was gut funktioniert. $data(canvas) canvasx $x für seine eigenen Werke gut aber nicht in Verbindung mit der find closest , auch wenn es in zwei Zeilen geschrieben ist.

  • So erstellen Sie ein Passwort-Eingabefeld mit Tkinter
  • Wie umgekehrt die y-Achse des importierten Bildes in Tkinter?
  • TKinter Grid Höhenbegrenzung
  • Echtzeituhr in Tkinter
  • Setzen Sie den markierten Text mit den Tags fett
  • Holen Sie sich die aktuellen Koordinaten eines Artikels auf einem Canvas-Widget mit seinem Item-Handle?
  • Python tkinter Baum erhalten ausgewählte Itemwerte
  • Wie zentriere ich einen Rahmen in einem Rahmen in Tkinter?
  • Texteingabe in Tkinter
  • Warum nennt man Eintrag.get () gibt mir "ungültigen Befehlsnamen"?
  • Tkinter verwaltet meine Event-Loops neben meinem mainloop
  • Python ist die beste Programmiersprache der Welt.