Frage

um ein wenig mit den beiden Tkinter und wxPython, gespielt zu haben wie ich Tkinter viel besser in Bezug darauf, wie sauber mein Quellcode aussieht. Allerdings scheint es nicht so viele Funktionen zu haben; insbesondere hat es kein Tabs (wie in den Registerkarten am oberen Rande eines Firefox-Fenster).

Ein wenig Googeln zu diesem Thema bietet ein paar Vorschläge. Es gibt einen Kochbuch-Eintrag mit einer Klasse mit dem Sie Registerkarten verwenden, aber es ist sehr primitiv. Es gibt auch Python megawidgets auf Source, obwohl dies sehr alt scheint und gab mir Fehler bei der Installation.

Hat jemand Erfahrung machen Tabbed GUIs in Tkinter? Was hast du benutzt? Oder ist es einfach so, dass jeder, der mächtige Windowing-Komponenten benötigt hat wxPython verwenden?

War es hilfreich?

Lösung

Auf den letzten Python (> 2.7) Versionen können Sie die ttk Modul, das Zugriff auf den Tk Themen-Widget Set, das in Tk 8.5 eingeführt wurde, zur Verfügung stellt.

Hier ist, wie Sie importieren ttk in Python 2:

import ttk

help(ttk.Notebook)

In Python 3, die ttk Modul wird mit den Standard-Verteilungen als Submodul von tkinter .

Hier ist ein einfaches Ausführungsbeispiel basiert auf einem Beispiel aus dem TkDocs Webseite:

from tkinter import ttk
import tkinter as tk
from tkinter.scrolledtext import ScrolledText


def demo():
    root = tk.Tk()
    root.title("ttk.Notebook")

    nb = ttk.Notebook(root)

    # adding Frames as pages for the ttk.Notebook 
    # first page, which would get widgets gridded into it
    page1 = ttk.Frame(nb)

    # second page
    page2 = ttk.Frame(nb)
    text = ScrolledText(page2)
    text.pack(expand=1, fill="both")

    nb.add(page1, text='One')
    nb.add(page2, text='Two')

    nb.pack(expand=1, fill="both")

    root.mainloop()

if __name__ == "__main__":
    demo()

Eine weitere Alternative ist das NoteBook Widget aus der tkinter.tix Bibliothek zu verwenden . Zur Nutzung tkinter.tix, müssen Sie den Tix Widgets installiert haben, in der Regel neben der Installation der Tk Widgets. Um die Installation zu testen, gehen Sie folgendermaßen vor:

from tkinter import tix
root = tix.Tk()
root.tk.eval('package require Tix')

Für weitere Informationen, lesen Sie in diese Homepage auf der PSF Webseite .

Beachten Sie, dass tix ziemlich alt und nicht gut unterstützt, so dass Ihre beste Wahl könnte für ttk.Notebook gehen.

Andere Tipps

Wenn jemand noch auf der Suche, ich habe diese Arbeit als Tab bekam in tkinter. Spielen Sie mit dem Code um, um es den Weg zu machen, um gewünschte Funktion (zum Beispiel Sie Schaltfläche hinzufügen können eine neue Registerkarte hinzugefügt werden):

from tkinter import *

class Tabs(Frame):

    """Tabs for testgen output"""

    def __init__(self, parent):
        super(Tabs, self).__init__()
        self.parent = parent
        self.columnconfigure(10, weight=1)
        self.rowconfigure(3, weight=1)
        self.curtab = None
        self.tabs = {}
        self.addTab()                
        self.pack(fill=BOTH, expand=1, padx=5, pady=5)

    def addTab(self):
        tabslen = len(self.tabs)
        if tabslen < 10:
            tab = {}
            btn = Button(self, text="Tab "+str(tabslen), command=lambda: self.raiseTab(tabslen))
            btn.grid(row=0, column=tabslen, sticky=W+E)

            textbox = Text(self.parent)
            textbox.grid(row=1, column=0, columnspan=10, rowspan=2, sticky=W+E+N+S, in_=self)

            # Y axis scroll bar
            scrollby = Scrollbar(self, command=textbox.yview)
            scrollby.grid(row=7, column=5, rowspan=2, columnspan=1, sticky=N+S+E)
            textbox['yscrollcommand'] = scrollby.set

            tab['id']=tabslen
            tab['btn']=btn
            tab['txtbx']=textbox
            self.tabs[tabslen] = tab
            self.raiseTab(tabslen)

    def raiseTab(self, tabid):
        print(tabid)
        print("curtab"+str(self.curtab))
        if self.curtab!= None and self.curtab != tabid and len(self.tabs)>1:
                self.tabs[tabid]['txtbx'].lift(self)
                self.tabs[self.curtab]['txtbx'].lower(self)
        self.curtab = tabid


def main():
    root = Tk()
    root.geometry("600x450+300+300")
    t = Tabs(root)
    t.addTab()
    root.mainloop()

if __name__ == '__main__':
    main()

Während es Ihnen im Moment nicht helfen kann, 8,5 tk kommt mit einem erweiterten Satz von Widgets. Dieses erweitert Set ist mit tk 8.4 über eine Erweiterung bekannt als „Kachel“ zur Verfügung. Eingeschlossen in dem erweiterten Satz von Widgets ist ein Notebook-Widget. Leider verwendet zu diesem Zeitpunkt Tkinter standardmäßig eine ziemlich alte Version von Tk, die nicht mit dieser Widgets kommt.

Es wurden Anstrengungen unternommen, Ziegel zur Verfügung Tkinter zu machen. Schauen Sie sich http://tkinter.unpythonic.net/wiki/TileWrapper . siehe für eine andere ähnliche Anstrengungen http://pypi.python.org/pypi/pyttk . Auch für einen Geschmack davon, wie diese Widgets aussehen (in Ruby, Perl und Tcl) finden Sie unter http: //www.tkdocs. com / .

Tk 8.5 ist eine große Verbesserung gegenüber Lagern Tk. Es führt mehrere neue Widgets, nativen Widgets und eine Theming-Engine. Hoffentlich wird es bald standardmäßig in Tkinter einen Tag zur Verfügung. Schade, dass die Python Welt hinter anderen Sprachen hinkt.

Update: Die neuesten Versionen von Python nun auch Unterstützung für die Themen-Widgets aus dem Kasten heraus. _

„Oder ist es einfach so, dass jeder, der mächtige Windowing-Komponenten benötigt hat WxPython zu benutzen?“
Kurze Antwort: Ja.

Lange Antwort: Es kann einige Übung für Ihren WxPython Code nehmen „sauber“ zu fühlen, aber es ist schöner und viel mächtiger als Tkinter. Sie werden auch eine bessere Unterstützung erhalten, da mehr Menschen es in diesen Tagen nutzen.

Welche Probleme haben Sie mit PMW haben? Es ist alt, ja, aber es ist reiner Python, so dass es funktionieren soll.

Beachten Sie, dass Tix nicht mit py2exe nicht funktioniert, wenn das ein Problem für Sie ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top