DynTkInter GuiDesigner neu überabeitet

Fragen zu Tkinter.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Hat auch ein neues Gesicht

Bild

Und das Grid Layout ist vom Allerfeinsten

Habe das Grid Layout ausführlich dokumentiert, siehe: https://github.com/AlfonsMittelmeyer/py ... -messaging
chessyman
User
Beiträge: 2
Registriert: Donnerstag 3. August 2017, 22:25

Hallo,
ich finde deinen GUI Designer sehr interessant. Scheint ja eine Menge zu bieten.
Habe mal angefangen die intro.py durchzugehen. Leider fehlt im Layoutfenster ein vertikaler Scrollbalken, so dass ich auf der Seite mit dem Grid Layout leider nicht mehr weiterkomme, da die next/back-Buttons nicht mehr angezeigt werden (auf Notebook mit Auflösung 1366*768 Pixeln). Man kann den Rest vom untenstehenden Text auch schon nicht mehr lesen.
Ich nehme an, bei HD-Auflösung ist kein Scrollbalken nötig, aber bei weniger schon.
Vielleicht könntest du das noch nachbessern ...

Herzliche Grüße
Christian
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

chessyman hat geschrieben:Hallo,
ich finde deinen GUI Designer sehr interessant. Scheint ja eine Menge zu bieten.
Habe mal angefangen die intro.py durchzugehen. Leider fehlt im Layoutfenster ein vertikaler Scrollbalken, so dass ich auf der Seite mit dem Grid Layout leider nicht mehr weiterkomme, da die next/back-Buttons nicht mehr angezeigt werden (auf Notebook mit Auflösung 1366*768 Pixeln). Man kann den Rest vom untenstehenden Text auch schon nicht mehr lesen.
Ich nehme an, bei HD-Auflösung ist kein Scrollbalken nötig, aber bei weniger schon.
Vielleicht könntest du das noch nachbessern ...

Herzliche Grüße
Christian
Ja, die Intro ist sowieso veraltet. Da habe ich schon lange nichts mehr gemacht. Ich werde aber auf Github die Beschreibung ergänzen. Da ist im letzten Monat auch eine gehörige Menge neu hinzugekommen.

Ja mit der Auflösung gibt es Probleme. Ich habe noch ein Windows Tablet mit lediglich HD Ready Auflösung, sofern man keinen Monitor anschließt. Da wird dann auch alles sehr knapp. Müßte mal überlegen, ob man noch mehr Wegschalten können sollte, oder ob man ein alternatives Layout oder auch mehr gesplittet anbieten sollte.

Also geplant ist, die Doku auf Github in Kürze weiter zu ergänzen.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Ich denke, dass man eine Menge Platz sparen könnte, natürlich einstellbar über das Menü.

Das sieht zwar gut aus:

Bild

Aber eine Combobox würde kaum Platz brauchen, oder besser ein Menubutton?

Also, damit meine ich nicht, dass das weg soll, sondern dass man eine alternative Anzeigeart auswählen kann.

Wie wäre es etwa mit so etwas? Würde kaum Platz kosten:

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk
try:
    from tkinter import ttk
except ImportError:
    import ttk

class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.combobox = ttk.Combobox(self)
        self.combobox['values'] = ('Message', 'Label', 'Entry', 'Button', 'Checkbutton', 'Radiobutton', 'Spinbox', 'Scale', 'Scrollbar', 'Frame', 'LabelFrame', 'PanedWindow', 'Listbox', 'Text', 'Canvas', 'Menu', 'Menubutton', 'Paint Canvas')
        self.combobox.current(newindex = 0)
        self.combobox.pack()

if __name__ == '__main__':
    Application().mainloop()
chessyman
User
Beiträge: 2
Registriert: Donnerstag 3. August 2017, 22:25

Ja, das ist auf jeden Fall eine Verbesserung ... übrigens nicht nur platzsparender, sondern auch rein optisch. Ich finde diese "bunte" Oberfläche und das leichte Durcheinander nicht so schön.
Noch besser fände ich eine Oberfläche ähnlich pygubu ... habe das gerade entdeckt und finde es auf den ersten Blick sehr übersichtlich, die Widgets linksseitig als Tree anzuordnen (mit kleinen Icons). Sieht sehr professionell aus. Leider wird hier der Umweg über XML-Dateien gegangen.
Finde deinen Ansatz prinzipiell besser, da ich sofort verwendbaren py-Code erhalte.
Insofern würde ich mir wünschen, deinen Ansatz verbunden mit einer klareren Designer-Oberfläche :D

Herzliche Grüße
Christian
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

chessyman hat geschrieben: pygubu ... habe das gerade entdeckt und finde es auf den ersten Blick sehr übersichtlich, die Widgets linksseitig als Tree anzuordnen (mit kleinen Icons). Sieht sehr professionell aus. Leider wird hier der Umweg über XML-Dateien gegangen
Diese Beurteilung ist mE falsch. Ein XML-Format (oder jedes andere *ausser* Code zu generieren, kann auch JSON oder YAML oder wegen mir CSV sein) hat den klaren Vorteil, wieder einladbar zu sein vom Designer. Du hast also die Moeglichkeit, ueber die Zeit an deiner GUI zu arbeiten. Python Code zu generieren macht das unmoeglich.

Diese Vorgehensweise war in den 90ern populaer, und hat dann zu Auswuechsen gefuehrt, bei denen man zB in Java GUI buildern dann Kommentare im Code fand zwischen denen dann die GUI-Calls waren. Wehe daran wurde gefummelt - das hat das ganze Projekt zebrochen, und man musste alles neu bauen.

Der einzige Grund, Python statt dem XML zu bevorzugen waeren weniger Abhaengigkeiten beim ausliefern der Anwendung. Die paar Zeilen Code machen den Kohl aber nun wirklich nicht fett.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Bin eh gerade dabei von tcl/tk zu konvertieren und habe dabei eine Datenstruktur benützt. Die könnte man, wenn auch die Menüs, Panedwindow und Notebooks implementiert sind, vorstellen. Und dann evtl. abchecken, ob eine Kompatibiltät mit JSON oder XML Files von anderen GuiBuildern erreichbar wäre.

Und dann als JSON, was einfach ist, oder auch XML anbieten. Ob damit aber auch Kompatibilität zwischen unterschiedlichen Programmen hergestellt werden kann, ist fraglich. Höchstens tcl/tk wäre ein Format, das alles kann. Kompatibilität wäre nur über tcl/tk zu erreichen.

Problematisch bis jetzt allerdings noch, wie bekomme ich Filenamen von Images, wenn ich tcl/tk GUI nur auslese und nicht selber noch in tcl/tk etwas mache?

Also über solche Formate ist kaum Kompatibilität herzustellen. pygubu wird auch kaum alles können und in seinem Format anbieten, oder?

Umgekehrt, dass der GuiDesigner andere Formate übernehmen könnte, dürfte kaum ein Problem sein, da er alles anbietet, was tkinter kann.
Natürlich noch nicht alles zum Bearbeiten oder zum Exportieren. Etwa der Parameter 'in' bei den Layouts wäre ein Problem. Ließe sich aber lösen, wenn man auch tcl/tk Namen verwenden würde und über diese Namen dann Referenzen auf Widgets eintragen kann.

Bisher benütze ich tcl/tk Namen nur beim Export mit Namen, damit ich mir daraus wieder die DynTkInter Namen besorgen kann.
Das müßte man sich überlegen, ob man tcl/tk Namen auch benützen kann, sofern man sich an die Anforderungen dafür hält.
Allerdings alle Widgets in der root zu haben und über 'in' dann beliebig irgendwo hineinsetzen, ist auch kein gutes Prinzip.

Zum Exportieren muss man sich natürlich auch an Anforderungen halten, denn Leerzeichen in Attributnamen gehen natürlich nicht.

Die Frage wäre: gibt es ein JSON oder XML Format, das alle Möglichkeiten der tcl/tk GUI enthält?
So eines könnte man nehmen, sofern ein solches existiert.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

__deets__ hat geschrieben:
chessyman hat geschrieben: pygubu ... habe das gerade entdeckt und finde es auf den ersten Blick sehr übersichtlich, die Widgets linksseitig als Tree anzuordnen (mit kleinen Icons). Sieht sehr professionell aus. Leider wird hier der Umweg über XML-Dateien gegangen
Diese Beurteilung ist mE falsch. Ein XML-Format (oder jedes andere *ausser* Code zu generieren, kann auch JSON oder YAML oder wegen mir CSV sein) hat den klaren Vorteil, wieder einladbar zu sein vom Designer. Du hast also die Moeglichkeit, ueber die Zeit an deiner GUI zu arbeiten. Python Code zu generieren macht das unmoeglich.
Das ist ein Fehlbeurteilung. Es gibt den Export mit Namen und daraus läßt sich auch das Script vollständig wiedergewinnen. Der GuiDesigner kann beliebigen Python Code übernehmen. Allerdings, wenn man nicht von der Möglichkeit Gebrauch macht, einen Namen mit anzugeben, heißen alle Buttons nur 'button'.

Im GuiDesigner kann man dann natürlich diese Namen ändern.

Also Python Code zu übernehmen, ist nichts Unmögliches für den GuiDesigner, sondern gerade das ist seine besondere Spezialität, die ihn von allen anderen GuiBuildern unterscheidet.

Der GuiDesignerb liest seine Daten nicht aus Formaten, sondern aus der GUI - hier aber der DynTkInter GUI.

Die DynTkInter GUI benutzt nicht die parent children Liste von Tkinter, sondern ein Namensdictionary, bei dem es dann zu jedem Namen eine children Liste gibt.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

chessyman hat geschrieben:habe das gerade entdeckt und finde es auf den ersten Blick sehr übersichtlich, die Widgets linksseitig als Tree anzuordnen (mit kleinen Icons). Sieht sehr professionell aus.
Da hatte ich auch schon daran gedacht. Mit der Treeview habe ich mich noch nicht auseinandergesetzt. Das Widget wird zwar vom GuiDesigner angeboten, aber nur das Widget selbst. Normalerweise wird man ja eine dynamische Treeview haben und die selber programmieren. Aber schön wäre es, wenn man schon einmal eine Vorlage dafür mit dem GuiDesigner erstellen könnte.

Treeview Details habe ich noch nicht implementiert. Dokumentation und die Treeview wären, was mit Priorität drankommen sollte. Manche Treeviews sind allerdings unbrauchbar. Bei PAGE etwa lassen sich die Äste nicht zumachen. Das ist natürlich Quark. Wenn ich einen Tree von meiner Festplatte haben möchte, dann möchte ich bestimmt nicht alle Files in einer Treeview sehen. Damit kann man bei größeren Programmen überhaupt nicht arbeiten. Aber Tree auf und zumachen, das wäre in Ordnung.

Ist aber auch nicht ganz einfach, da es jetzt die Möglichkeit gibt, Widgets mit Copy und Paste umzuverlagern. Da müßten dann auch Unterverzeichnise der Treeview mit aktualisiert werden.

Wie gesagt, an Treeview ist gedacht. Und implementiert soll da noch mehr werden.

Auch das Text Widget wäre ein Widget, das weitere Optionen verdient. Da kann man nämlich auch verschiedene Fonts und Farben haben. Images mit drin haben, selbst Widgets mit drin haben. 2000 Zeilen sind für ein Text Widget überhaupt kein Problem. Ich könnte mir vorstellen, dass sogar IDLE als Programmeditor mit dem Text Widget arbeitet mit Syntax Highlighting etc. Daraus kann man eine ganze Textverarbeitung machen.
Ich hatte gedacht, evtl. so etwas wie mark down zu implementieren, sodass man allerhand Doku mit dem Textwidget schreiben kann.

Siehe: http://markdown.de/
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da ich bei mir keine GUIs gebaut bekomme - wahrscheinlich weil du irgendetwas komisches mit den Menues machst, das unterm Mac nicht funktioniert - kann ich deine Behauptung nicht nachvollziehen, und bleibe bei meiner aus jahrelanger Erfahrung bestehenden Einschaetzung...
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

__deets__ hat geschrieben:Da ich bei mir keine GUIs gebaut bekomme - wahrscheinlich weil du irgendetwas komisches mit den Menues machst, das unterm Mac nicht funktioniert - kann ich deine Behauptung nicht nachvollziehen, und bleibe bei meiner aus jahrelanger Erfahrung bestehenden Einschaetzung...
Das ist jetzt dumm, ich habe Windows und Linux, aber keinen Mac. Unter Linux, hatte ich Farben für commands im Menü verwendet. Windows stellt aber die Farben nicht dar. Aber dass der Mac dann nicht einmal ein Menü anzeigt?

Das wäre weiter zu untersuchen, was der Mac mit dem Menü macht. Vielleicht sollte ich das mal exportieren, damit Du das weiter untersuchen kannst. In Untermenüs habe ich jetzt allerdings Images drin. Aber das sollte doch nichts ausmachen, oder?

Wenn Du den neuesten GuiDesigner hast und dann dieses Script in das Verzeichnis legst, in dem auch main.py ist - wegen Pfaden für die images. Vielleicht kannst Du herausbekommen, was mit diesem Menü auf dem Mac los ist?

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.menu = Menu_1(self)
        self['menu'] = self.menu

class Menu_1(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        # widget definitions ===================================
        self.Menu = Menu_2(self,tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.Menu,label='File', underline=0)
        self.Menu_1 = Menu1(self,tearoff=0, bg='white', fg='black', selectcolor='blue', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.Menu_1,label='Special', underline=0)
        self.menu = Menu_3(self,tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.menu,label='Help')
        self.add_command(label='Create ON', underline=0, background='lightgreen')
        self.add_command(label=' ', state='disabled')
        self.add_command(label='Config ON', underline=1, background='lightgreen')
        self.add_command(label=' ', state='disabled')
        self.add_command(label='Layout ON', underline=0, background='lightgreen')
        self.add_command(label=' ', state='disabled')
        self.add_command(label='Mouse ON', underline=0, background='lightgreen')
        self.add_command(label='Hide', underline=0)
class Menu_2(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.backup_img = tk.PhotoImage(file = 'guidesigner/images/filesave.gif')
        self.add_command(compound='left', image=self.backup_img, label='Backup', underline=0)
        self.Save_img = tk.PhotoImage(file = 'guidesigner/images/geany-save-all.gif')
        self.add_command(compound='left', image=self.Save_img, label='Save', underline=0)
        self.Load_Edit_img = tk.PhotoImage(file = 'guidesigner/images/gtk-open.gif')
        self.add_command(compound='left', image=self.Load_Edit_img, label='Load & Edit', underline=0)
        self.add_command(label='Load & Run')
        self.Menu = Menu_4(self,tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.Menu,label='Split & Join')
        self.add_separator()
        self.Export_img = tk.PhotoImage(file = 'guidesigner/images/document-save-as.gif')
        self.Menu_1 = Menu1_1(self,tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.Menu_1,compound='left', image=self.Export_img, label='Export tkinter', underline=0)
        self.Menu_2 = Menu2(self,tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.Menu_2,label='Save Access')
        self.add_separator()
        self.Quit_img = tk.PhotoImage(file = 'guidesigner/images/application-exit.gif')
        self.add_command(compound='left', image=self.Quit_img, label='Quit')

class Menu_4(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.add_command(label='Help')
        self.add_separator()
        self.add_command(label='Save (part)')
        self.add_command(label='Save (config - part)')
        self.add_command(label='Load & Edit (part)')
        self.add_command(label='Load & Run (part)')

class Menu1_1(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.add_command(label='Help')
        self.add_separator()
        self.add_command(label='tkinter', underline=0)
        self.add_command(label='tkinter (names)', underline=9)
        self.add_command(label='tkinter (Designer)', underline=9)

class Menu2(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.add_command(label='Widget Depth')
        self.add_command(label='Container Depth')

class Menu1(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='blue', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.Refresh_img = tk.PhotoImage(file = 'guidesigner/images/view-restore.gif')
        self.add_command(compound='left', image=self.Refresh_img, label='GuiDesigner Refresh', underline=0)
        self.GUI_Refresh_img = tk.PhotoImage(file = 'guidesigner/images/fullscreen.gif')
        self.add_command(compound='left', image=self.GUI_Refresh_img, label='GUI Refresh', underline=4)
        self.Toproot_img = tk.PhotoImage(file = 'guidesigner/images/top.gif')
        self.add_command(compound='left', image=self.Toproot_img, label='Toproot')
        self.add_separator()
        self.add_command(activebackground='white', label='Navigation Order', state='disabled')
        self.alphabetical_img = tk.PhotoImage(file = 'guidesigner/images/tools-check-spelling.gif')
        self.add_radiobutton(value='alphabetical', compound='left', label='alphabetical', image=self.alphabetical_img, underline=0)
        self.z_order_img = tk.PhotoImage(file = 'guidesigner/images/sort-ascending.gif')
        self.add_radiobutton(value='basement', compound='left', label='z-order', image=self.z_order_img, underline=0)
        self.i_order_img = tk.PhotoImage(file = 'guidesigner/images/index.gif')
        self.add_radiobutton(value='index', compound='left', label='pack index', image=self.i_order_img, underline=0)
        self.add_separator()
        self.ExpertOptions_img = tk.PhotoImage(file = 'guidesigner/images/meeting-chair.gif')
        self.Menu = Menu_5(self,tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.Menu,compound='left', image=self.ExpertOptions_img, label='Expert Options')

class Menu_5(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.add_command(label='Help')
        self.add_separator()
        self.add_command(label='Code')

class Menu_3(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.add_command(label='Introduction')
        self.add_command(label='Config Options')
        self.add_command(label='Tuple Entries')
        self.add_command(label='Menu Entries')
        self.add_command(label='Backup')
        self.add_command(label='Save & Load')
        self.add_command(label='Export tkinter')
        self.add_command(label='Save Access')
        self.add_separator()
        self.menu = Menu_6(self,tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.menu,label='Programming')
        self.menu_1 = Menu1_2(self,tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        self.add_cascade(menu=self.menu_1,label='Code in Scripts')
        self.add_command(label='Examples')

class Menu_6(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.add_command(label='Load Scripts')
        self.add_command(label='Access Widgets')
        self.add_command(label='Access Toplevel')

class Menu1_2(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, bg='white', fg='black', selectcolor='black', relief='solid', activebackground='#7bfeff', activeforeground='black', disabledforeground='grey64')
        # widget definitions ===================================
        self.add_command(label='Functions')
        self.add_command(label='Namespace')
        self.add_command(label='Imports')
        self.add_command(label='DynTkImports')
        self.add_command(label='Relative Access')
        self.add_command(label='Root Access')
        self.add_command(label='Place for Code')
        self.add_command(label='DynAccess')

if __name__ == '__main__':
    Application().mainloop()
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich weiss jetzt nicht, was da passieren soll - aber es tut sich nix weiter. Es laeuft, aber ich bekomme keine Menues.

Ich vermute weniger das Farben ein Problem sind (die werden wahrscheinlich auch ignoriert, aber das ist ja nicht schlimm), aber der Mac erlaubt wahrscheinlich keine Menues die nur aus einem Eintrag bestehen und keine Items haben. Du hast ja im Grunde (so interpretiere ich deine intro.py) Buttons emuliert. Das geht halt nicht.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

__deets__ hat geschrieben:Ich weiss jetzt nicht, was da passieren soll - aber es tut sich nix weiter. Es laeuft, aber ich bekomme keine Menues.

Ich vermute weniger das Farben ein Problem sind (die werden wahrscheinlich auch ignoriert, aber das ist ja nicht schlimm), aber der Mac erlaubt wahrscheinlich keine Menues die nur aus einem Eintrag bestehen und keine Items haben. Du hast ja im Grunde (so interpretiere ich deine intro.py) Buttons emuliert. Das geht halt nicht.
Oh, mein Gott, Du sprichst von meiner intro.py. Vom Eingangsbild. Ja, das ist nur ein Bildchen, ein Photoimage vom Menü. Da rührt sich natürlich nichts.

Den GuiDesigner startet man über main.py.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

So blöd bin ich nicht. In deiner Intro.py ist ein BILD das zeigt wie man einen Button erzeugt. Diesen Menüpunkt habe ich nicht in Main.py
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

__deets__ hat geschrieben:So blöd bin ich nicht. In deiner Intro.py ist ein BILD das zeigt wie man einen Button erzeugt. Diesen Menüpunkt habe ich nicht in Main.py
Ach so, im Gui Designer ist ein Menü. Da steht 'Create ON'. Wenn Du da draufdrückst, dann geht die Spalte zum Widget Erzeugen auf.
Wenn Du diesen Menüpunkt allerdings nicht hast, wäre eine Bildschirmcopy nicht schlecht. Ich hatte für Abstände unter Linux noch command buttons mit leerem Text - nö mit einem Leerzeichen als Text, da sonst unter Windows '()' kommt - eingefügt. Sollte das beim Mac etwas ausmachen?

Da kannst Du Bilder hochladen: https://www.pic-upload.de/

Ich hatte ja vorher einen Code vom Menü gepostet. Ist da 'Create ON' sichtbar?
Oder macht background = 'lightgreen' Probleme? In Windows hatte das Null Effekt.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nochmal: ich bin nich blöd. Ich verstehe schon genau, dass du eine Art Toolbar gebaut hast. Die Menüpunkte die du als Buttons "missbrauchst" gibt es aber nicht. Darum schrieb ich "Mac erlaubt wahrscheinlich keine Menues die nur aus einem Eintrag bestehen und keine Items haben. Du hast ja im Grunde (so interpretiere ich deine intro.py) Buttons emuliert. Das geht halt nicht."

Und mit "interpretiere ich intro.py" meine ich "interpretiere ich was Intro.py an Screenshots zeigt".
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

__deets__ hat geschrieben:Darum schrieb ich "Mac erlaubt wahrscheinlich keine Menues die nur aus einem Eintrag bestehen und keine Items haben. Du hast ja im Grunde (so interpretiere ich deine intro.py) Buttons emuliert. Das geht halt nicht."

Und mit "interpretiere ich intro.py" meine ich "interpretiere ich was Intro.py an Screenshots zeigt".
Kann man beim Mac im Hauptmenü nur Cascaden machen? Und keine commands, checkbuttons und radiobuttons? Wenn dem so ist, dann hatte ich das nicht gewußt. OK, dann braucht man noch eine extra Leiste für diese Buttons. Werde schauen, ob ich dafür bei Create Widgets, den Platz ein wenig kleiner machen kann, sodass sich in der Höhe kaum Unterschied ergibt.
Antworten