
OK, GTK habe ich mit tkinter verwechselt ^^ Ich schaue mir mal GTK genauer an. Die Screenshots haben mich überzeugt. Oh man schon wider über 1000 Zeilen Code in den Virtuellen Mülleimer schmeißen ^^
GTK ist aber Pythonischer oder? Bitte sag Ja ^^
Wenn dir wxPython taugt, bleib dabei. Ich habe nicht gesagt dass wxPython schlecht ist. Es war mal schlecht, wie es im Moment ist, kann ich dir nicht sagen, da ich es nicht mehr nutze. Kann schon sein, dass es inzwischen besser geworden ist, es gibt hier mehrere Leute im Forum die es gerne nutzen.XtraNine hat geschrieben:OK, GTK habe ich mit tkinter verwechselt ^^ Ich schaue mir mal GTK genauer an. Die Screenshots haben mich überzeugt. Oh man schon wider über 1000 Zeilen Code in den Virtuellen Mülleimer schmeißen ^^
Naja, die PyGTK-Bindungen kommen mir persönlich angenehmer zum programmieren vor. Kann aber auch daran liegen, dass sie besser Dokumentiert sind. Und hmm.. einige Sachen wie TreeViews sind auch in PyGTK unnötig komplex.XtraNine hat geschrieben:GTK ist aber Pythonischer oder? Bitte sag Ja ^^
Hi BlackJack!BlackJack hat geschrieben:also würde ich bei eigenen `wx` Klassen die Regeln von `wx` benutzen. Bei der Programmlogik würde ich mich eher an PEP8 halten, insbesondere weil ich versuchen würde die Logik und die GUI möglichst getrennt zu halten.
Code: Alles auswählen
def show_infodialog(self, event = None):
"""
Zeigt die Info-Dialogbox an.
"""
pass
Hi Leonidas!Leonidas hat geschrieben:Ich bin einer der wxPython-API-FlüchtlingeLiegt aber nicht am CamelCase, sondern an der C++ness von dessen API, und (damals) an den Tonnen von Bugs.
Warum ist das der letzte Punkt Deiner Aufzählung? Diese IDs waren damals der Grund warum ich schreiend weggelaufen bin als ich wxWindows ausprobiert hatte. Zu jedem Objekt eine ID erzeugen und die stellvertretend in der Gegend herum zu reichen ist mir sowas von unpythonisch, aufwändig und überflüssig erschienen...gerold hat geschrieben:- ID´s werden nicht mehr gebraucht, da man mit ``Bind()``, Events auch an Objekte und nicht nur an ID´s binden kann.
BlackJack hat geschrieben:der Grund warum ich schreiend weggelaufen bin
Hi XtraNine!XtraNine hat geschrieben:Ich mache immer nen Konstante zb. WXID_IRGENDWAS und mache dann ein wx.NewId(), das mir selber eine ID erzeugt -> WXID_IRGENDWAS = wx.NewId().
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-1")
class MyFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Hallo Welt (ohne IDs)"):
wx.Frame.__init__(self, parent, id, title)
# Panel
panel = wx.Panel(self)
# Hauptrahmen (fuer den Abstand)
vbox_rahmen = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_rahmen)
# vbox (innherhalb des Hauptrahmens mit 5px Abstand)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox_rahmen.Add(vbox, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
# Label
label = wx.StaticText(
panel, -1, u"Ich werde geändert, wenn der Button geklickt wird!",
)
self.label = label
vbox.Add(label, proportion = 1, flag = wx.ALL, border = 5)
# Button
button = wx.Button(panel, -1, "Klick mich!")
vbox.Add(button, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
button.Bind(wx.EVT_BUTTON, self.aendere_labeltext_per_button) # Eventhandler binden
# Menüleiste
menubar = wx.MenuBar()
# Hilfe-Menü
menu_help = wx.Menu()
menuitem = menu_help.Append(-1, "&Info")
# Ausnahme! Menüs müssen über das Frame-Objekt an ein Event gebunden werden.
self.Bind(wx.EVT_MENU, self.aendere_labeltext_per_menue, menuitem)
menubar.Append(menu_help, "&Hilfe")
# Menüleiste an Frame binden
self.SetMenuBar(menubar)
# Minimalgröße festlegen
panel.Fit()
self.Fit()
self.SetSizeHintsSz(self.GetSizeTuple())
# Zentrieren
self.Center()
def aendere_labeltext_per_button(self, event = None):
label = self.label
label.SetLabel(u"Es wurde der Button geklickt!")
def aendere_labeltext_per_menue(self, event = None):
label = self.label
label.SetLabel(u"Es wurde das Info-Menü ausgewählt!")
def main():
app = wx.PySimpleApp()
f = MyFrame()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Ja, das GTK-TreeView.... Ich hab mich auch vor kurzem am Kopf gekratztLeonidas hat geschrieben: ... einige Sachen wie TreeViews sind auch in PyGTK unnötig komplex.
Ja, allerdings. Und ich finde, das klappt recht problemlos, insbesondere wenn man Klassen- und Methodennamen nicht mehr als 40 Zeichen spendiert, wie das in der Java-Welt ja nichts ungewöhnliches ist. Und irgendwann muss man sowieso umbrechen, das geht dann auch bei Spalte 80 (bzw. 79) nicht wirklich schlechter.oliver1974 hat geschrieben:An die Regel von wegen 80 Zeichen Länge.. Haltet Ihr euch wirklich dran?
Beim Lernen von wx bin ich auch über viel, ja, unbrauchbaren oder wertlosen Code gestolpert. Das mag aber daran liegen, dass diese API (und das mag auf andere, außer vielleicht die von Tkinter, wohl auch zutreffen) umfangreich geändert wurde. IDs und diverse Initialisierungen wurden überflüssig usw. Für Neueinsteiger ist der jeweils aktuelle Zustand der API sicherlich eine bessere Ausgangsposition, aber das Vorhandensein von nun unbrauchbarem Code ist natürlich ein unangenehmer Trade-Off.oliver1974 hat geschrieben:Überhaupt, Tutorials und GUI-Apis unter Pyhton scheinen so ein Thema zu sein, auch das PyGTK-Tutorial ist nicht mehr so Up-To-Date, an manchen Stellen fliegen einem ja beim Nachprogrammieren nur so die "deprecation warnings" um die Ohren.
Irgendwie scheint mir da echt eine "Marktlücke" zu sein, oder... ?
Hmm, ich benutze eigentlich nicht gerade mega-lange Klassen- undY0Gi hat geschrieben:Ja, allerdings. Und ich finde, das klappt recht problemlos, insbesondere wenn man Klassen- und Methodennamen nicht mehr als 40 Zeichen spendiert, wie das in der Java-Welt ja nichts ungewöhnliches ist. Und irgendwann muss man sowieso umbrechen, das geht dann auch bei Spalte 80 (bzw. 79) nicht wirklich schlechter.oliver1974 hat geschrieben:An die Regel von wegen 80 Zeichen Länge.. Haltet Ihr euch wirklich dran?
Hi oliver!oliver1974 hat geschrieben:Heute fährt doch kaum einer Auflösungen, wo eine Zeile mit 90 - 100 Zeichen ein Problem darstellt, oder?
Ja... Auch wenn ich PyLucid noch einige längere Zeilen stecken, aber das sind meist alte Codezeilenoliver1974 hat geschrieben:An die Regel von wegen 80 Zeichen Länge.. Haltet Ihr euch wirklich dran?
# Vertikale Linie zur Textberenzung auf 79 Zeichen
edge.column=79
edge.mode=1
edge.colour=#dddddd
Hi oliver!oliver1974 hat geschrieben:Scheint jetzt irgendwie Geschmackssache zu sein, mich hat das scrollen weniger gestört als das "zerreissen" der lines.
Code: Alles auswählen
def meine_funktion(
argument1, argument2, argument3, argument4,
argument5 = None, argument6 = None
):
if (
argument1 == "langer Text" and
argument2 == "langer Text" and
argument3 == "auch ein langer Text"
):
message = (
"Das ist die perfekte Welle. Das ist der perfekte Tag. "
"Das ist die perfekte Welle. Das ist der perfekte Tag. "
"Das ist die perfekte Welle. Das ist der perfekte Tag. "
"Das ist die perfekte Welle. Das ist der perfekte Tag.\n"
"Wir sind gekommen um zu bleiben. Wir sind gekommen um zu bleiben.\n"
"Wir sind gekommen um zu bleiben. Wir sind gekommen um zu bleiben.\n"
)
return message
else:
return "Hallo Welt"
a = meine_funktion(
argument1 = "Das ist langer Text", # hier kann auch eine Bemerkung stehen
argument2 = "Das ist langer Text",
argument3 = "Das ist langer Text", # hier kann auch eine Bemerkung stehen
argument4 = "Das ist langer Text", # hier kann auch eine Bemerkung stehen
)
print a
Code: Alles auswählen
def meine_funktion(argument1, argument2, argument3, argument4, \
argument5 = None, argument6 = None):
if (argument1 == "langer Text" and argument2 == "langer Text" and \
argument3 == "auch ein langer Text"):