wenn ich beispielsweise in base.py
APP_NAME = "bashstyle"
habe und dann base.py lade, wie stelle ich dann sicher, dass das andere Skript APP_NAME kennt? Gibt's sowas wie Bashs `export'?
Kontextmenu in GtkCombobox?
Vermutlich kannst du die Maus-Events bei einer ComboBox nicht verarbeiten, weil GTK selbst schon auf diese reagieren muss.
Finde es aber auch sehr seltsam, was du da vor hast. Habe ich das richtig verstanden, dass man zuerst einen Eintrag in der ComboBox auswählen soll und anschließend soll automatisch das Popup-Menu erscheinen? Falls ja, finde ich das keine gute Lösung. IMHO ist das ein Verhalten, was die meisten User als störend empfinden würden. Wenn ich richtig liege mit meiner Vermutung solltest du dir vielleicht eine Alternative überlegen.
Finde es aber auch sehr seltsam, was du da vor hast. Habe ich das richtig verstanden, dass man zuerst einen Eintrag in der ComboBox auswählen soll und anschließend soll automatisch das Popup-Menu erscheinen? Falls ja, finde ich das keine gute Lösung. IMHO ist das ein Verhalten, was die meisten User als störend empfinden würden. Wenn ich richtig liege mit meiner Vermutung solltest du dir vielleicht eine Alternative überlegen.
Chrispy hat geschrieben:wenn ich beispielsweise in base.py
APP_NAME = "bashstyle"
habe und dann base.py lade, wie stelle ich dann sicher, dass das andere Skript APP_NAME kennt? Gibt's sowas wie Bashs `export'?
Code: Alles auswählen
from base import APP_NAME
Schon klar, aber dann habe ich in jeder Datei 1000 (leicht übertrieben) imports. Also gibt es kein `export' .
Und zum Kontextmenü, nunja es gibt zwei Textpuffer (einen für PROMPT_COMMAND und PS1) und mir ist nichts besseres zur Auswahl eingefallen, als das Kontextmenü. Mit Knöpfen ist das ja kein Problem.
Und zum Kontextmenü, nunja es gibt zwei Textpuffer (einen für PROMPT_COMMAND und PS1) und mir ist nichts besseres zur Auswahl eingefallen, als das Kontextmenü. Mit Knöpfen ist das ja kein Problem.
Ich habs:
Na geht doch
Code: Alles auswählen
global APP_NAME
APP_NAME = "bashstyle"
Was noch fehlt ist ein globales setattr ...
Wenn ich das als base.ini_widget("beispielwidget") aufrufe, dann kann ich nicht aus dem anderen Skript darauf zugreifen (z.B. beispielwidget.get_text() oder so)
Code: Alles auswählen
class ini_widget(object):
def __init__(self, widget):
####################### Initialize a Widget #######################################
setattr(self, widget, gtkbuilder.get_object("%s" % widget))
Du kannst ja auch schreibenChrispy hat geschrieben:Schon klar, aber dann habe ich in jeder Datei 1000 (leicht übertrieben) imports. Also gibt es kein `export' .
Code: Alles auswählen
from base import func1, func2
Code: Alles auswählen
import base
base.func1()
Vielleicht beschreibst oder skizzierst auch mal kurz deine Struktur, wie du dir das vorgestellt hast. (Hilft meistens auch sofort dir selbst, um gleich Fehler in der Struktur zu erkennen). Also z.B. so
Code: Alles auswählen
-base.py
-APP_NAME
-def main
-class Base
-other.py
-class MyClass
...
Eine ComboBox hat ja schon ein Dropdown-Menü, zu was benötigst du dann noch extra ein zweites (danach?) ?Chrispy hat geschrieben: Und zum Kontextmenü, nunja es gibt zwei Textpuffer (einen für PROMPT_COMMAND und PS1) und mir ist nichts besseres zur Auswahl eingefallen, als das Kontextmenü. Mit Knöpfen ist das ja kein Problem.
Mal ganz davon abgesehen, hört sich das nach Radio Buttons an, was du benötigst. http://graphics.sci.ubu.ac.th/api/pygtk ... ttons.html
Wenn ich voll daneben liege, solltest dein Problem noch einmal besser beschreiben
Also du wählst in der Combobox aus WAS du einfügen willst, dann musst du aber noch ausählen WOHIN. DAS ist das Problem. Und Deshalb ist mir nichts besseres eingefallen ................................................... Ausser .... Eine Combobox mit zwei Spalten
[PS1] [P_C]
[xxx] [xxx]
[abc] [abc]
.... Aber seltsam ist das auch.
Struktur: bs-ng als das skript das als `bashstyle' ausgeführt wird und den Rest lädt.
base.py enthält die Basis (init_gettext, init_gtkbuilder, init_gconf, init_rest, ini_widget, check_lockfile, write_lockfile, get_value)
und dann je ein Modul je Subprogramm (BashStyle-NG besteht aus mehreren ehemals eigenständigen Programmen und mehreren Gruppen, also style.py alias.py advanced.py readline.py extras.py profile.py vim.py nano.py custom.py ls.py)
[PS1] [P_C]
[xxx] [xxx]
[abc] [abc]
.... Aber seltsam ist das auch.
Struktur: bs-ng als das skript das als `bashstyle' ausgeführt wird und den Rest lädt.
base.py enthält die Basis (init_gettext, init_gtkbuilder, init_gconf, init_rest, ini_widget, check_lockfile, write_lockfile, get_value)
und dann je ein Modul je Subprogramm (BashStyle-NG besteht aus mehreren ehemals eigenständigen Programmen und mehreren Gruppen, also style.py alias.py advanced.py readline.py extras.py profile.py vim.py nano.py custom.py ls.py)
Zuletzt geändert von Chrispy am Donnerstag 5. November 2009, 22:50, insgesamt 1-mal geändert.
``global`` sollte man nicht verwenden! Mach das über imports, ``global`` ist viel zu magisch. Vor allem modulübergreifend (wusste gar nicht, dass das geht...).Chrispy hat geschrieben:Ich habs:
Na geht dochCode: Alles auswählen
global APP_NAME APP_NAME = "bashstyle"
Dein zweites Beispiel mit dem ``setattr`` ist mir schleierhaft. Mir keimt allmählich der Gedanke auf, dass du das Grundprinzip von OO nicht so richtig verstanden hast.
1 Combo, 2 RadioButtons und 1 Button finde ich da die am geeignetsten. (Dürfte ja klar sein, was die jew. Elemente dann machen sollen, od?)Chrispy hat geschrieben:Also du wählst in der Combobox aus WAS du einfügen willst, dann musst du aber noch ausählen WOHIN. DAS ist das Problem. Und Deshalb ist mir nichts besseres eingefallen ................................................... Ausser .... Eine Combobox mit zwei Spalten
[PS1] [P_C]
[xxx] [xxx]
[abc] [abc]
.... Aber seltsam ist das auch.
Nunja ini_widget war einfach eine Lösung um weniger tippen zu müssen, also statt
self.beispielwidget = gtkbuilder.get_object("beispielwidget")
einfach ini_widget("beispielwidget")
Ich habe kein Problem dass "normal" zu machen, aber so sieht's halt besser aus und beugt Sehnenscheidenendzündungen vor
_______
Combo = was
Radiobuttons = wohin
Button = mach schon
Oder?
self.beispielwidget = gtkbuilder.get_object("beispielwidget")
einfach ini_widget("beispielwidget")
Ich habe kein Problem dass "normal" zu machen, aber so sieht's halt besser aus und beugt Sehnenscheidenendzündungen vor
_______
Combo = was
Radiobuttons = wohin
Button = mach schon
Oder?
Jetzt ist mir klar, was du damit willst. Allerdings kann das so nicht funktionieren (vermute immer noch, dass dir das Arbeiten mit Klassen und Instanzen nicht ganz klar ist). Außerdem "sieht" das überhaupt nicht besser aus, das ist viel zu magisch.Chrispy hat geschrieben:Nunja ini_widget war einfach eine Lösung um weniger tippen zu müssen, also statt
self.beispielwidget = gtkbuilder.get_object("beispielwidget")
einfach ini_widget("beispielwidget")
Ich habe kein Problem dass "normal" zu machen, aber so sieht's halt besser aus und beugt Sehnenscheidenendzündungen vor
Hier eine (IMHO noch zu magische, aber vllt findest du das ja i.O.) Alternative. Vielleicht hilft dir das auch, OO besser zu verstehen.
Code: Alles auswählen
class Initiator(object):
def __init(self, gtkbuilder):
self.builder = gtkbuilder
def init_widget(objects):
for obj in objects:
setattr(self, obj, self.builder.get_object(obj))
class MainWindow(Initiator):
def __init__(self, builder):
Initiator.__init__(self, builder)
self.init_widget(['entry1', 'entry2', 'radio1'])
class OptionWindow(gtk.Window, Initiator):
def __init__(self, builder):
Initiator.__init__(self, builder)
gtk.Window.__init__(self)
self.init_widget(['hbox1', 'text_field'])
Edit2: ``load_objects`` wäre vllt ein besserer Name als ``init_widget``, hab mich da von dir verleiten lassen
Genau!Chrispy hat geschrieben: _______
Combo = was
Radiobuttons = wohin
Button = mach schon
Oder?
@ice2k3: ``global`` auf Modulebene funktioniert auch nicht so wie der OP sich das denkt. Das ist auf Modulebene eine Nulloperation und bewirkt rein gar nichts.
Gut. Habe den Code jetzt überarbeitet. Zwei Radiobuttons kümmern sich jetzt darum, in welchen Puffer der Text soll. Aber was mir noch nicht gefällt, sind styles_pc{} (Zeile 2305) und styles_ps1{} (Zeile 2408). Evtl hat da jemand einen Verbesserungsvorschlag?
http://bashstyle-ng.googlecode.com/svn/ ... bsng.py.in
http://bashstyle-ng.googlecode.com/svn/ ... bsng.py.in