2016-05-08 2 views
0

Sorry, wenn komplette grundlegende Frage. Ich mache meine ersten Schritte mit TkInter und versuche, eine GUI-Schnittstelle zu einer Videobibliothek zu entwickeln (ich habe Erfahrung mit WPF/XAML, dem MVVM-Paradigma und teilweise mit html/css).GUI: Vertikale Liste von beliebigen Elementen mit TkInter

Ich hätte gerne eine horizontale Liste, scroll-fähig, von benutzerdefinierten Elementen. Jedes Element enthält Videodaten einschließlich Metadaten (Länge, Bitrate usw.), ein Bild (Miniaturbild) und einige Aktionsschaltflächen (Wiedergabe, Löschen, Markieren usw.). Idealerweise möchte ich auch einen Ziehgriff haben, um die Reihenfolge der Videos neu anzuordnen.

Ich suche, kann aber nicht finden, was sollte Element in WPF, mit Bindung an Daten und Vorlagen sein. Gibt es das überhaupt in Tk, oder ist es eine zu ehrgeizige Voraussetzung für ein tragbares, freies Framework?

Auch wenn Templates in Tk nicht existieren, kann ich immer noch manuell das Elternsteuerelement füllen (z. B. ähnlich den HTML-Elementen - jedes hat viele Steuerelemente) - aber ich konnte keine Liste beliebiger Widgets finden.

Ist eine zweiseitige Bindung vorhanden (z. B. das Hinzufügen eines Elements zur Liste der Elemente sollte die Benutzeroberfläche automatisch aktualisieren)?

Ist Tk die richtige Richtung? Die zugrunde liegende Logik ist in Python, also suche ich nach einer python-freundlichen Lösung. Iron Python mit WPF wäre die offensichtliche Lösung, aber ich möchte portabel sein, und der aktuelle Status von Iron Python ist nicht sehr vielversprechend, und ich verwende Bibliotheken, die nicht von Iron Python unterstützt werden.

+0

Zeigen Sie Ihre Codes oder jegliche versuchen. Es wird einfacher sein, Ihnen zu helfen – Lemayzeur

+0

Ihr Titel fragt nach einer vertikalen Liste, der Körper fragt nach einer horizontalen Liste. –

Antwort

0

Die am häufigsten verwendete Methode zum Erstellen eines benutzerdefinierten Elements ist die Unterklasse Frame. Sie können in diesen Frame (Bild, Schaltflächen usw.) beliebige Elemente einfügen, und dann können Sie das Ganze als einzelnes GUI-Element behandeln.

import Tkinter as tk 
... 
class CustomElement(tk.Frame): 
    def __init__(self, parent, meta, image_file, ...): 
     tk.Frame.__init__(self, parent) 
     # <create widgets for image, metadata, etc here> 

Sie können dann ein benutzerdefiniertes Widget erstellen, das als Container für diese Elemente dient. Sie können z. B. eine Leinwand verwenden, mit der Sie diese Objekte horizontal ausrichten und an die Sie eine Bildlaufleiste anhängen können.

Schließlich verfügt tkinter über ein robustes Event-Management-System, mit dem sich Dinge per Drag & Drop verschieben lassen. Es gibt kein integriertes Ziehen und Ablegen per se, aber Sie können Ihre eigenen Griffe und benutzerdefinierten Bindungen für das Klicken und Freigeben erstellen, um es zu implementieren.

Ein Beispiel für die Dinge auf einer Leinwand mit der Maus verschieben, finden Sie diese Antwort: https://stackoverflow.com/a/6789351/7432