das Menu Fantastic verwendet für die Unternenus die nackte ChoiceBox und die ist nicht wirklich skinnbar, insofern wirst du da wenig erfolg haben.
LG
gutemine
das Menu Fantastic verwendet für die Unternenus die nackte ChoiceBox und die ist nicht wirklich skinnbar, insofern wirst du da wenig erfolg haben.
LG
gutemine
ist es möglich die choicebox auch direkt für das hauptmenu einzusetzen?
in def __init__
mit
self.session.openWithCallback(self.FantasticMenuSelected,ChoiceBox,mfmenudescr,self.ListMenuFantastic())
ersetzen oder wird das nicht reichen?
p.s.: welches argument würde den title an die choicebox weiterreichen? die choicebox akzeptiert ja an sich einen "Input"
ja, schon aber da ist extra das mainmenu verwendet damit der skin greift und man wenigstens grösse und position anpassen kann.
LG
gutemine
PS: wenn du einen skinn verstehst könntest du dir gleich ein ordentliches plugin schreiben statt das MF aufzubohren (siehe es dann asl coedebeispiel für die verwendung von choicebox, messagebox, consolebox,... Die ganzen menu.cfg sind zwar leicht zu verwenden, aber dadurch hat es halt auch seine limitierungen
hatte ich teils schon, aber es gab da ein problem. ausserdem ist dein plugin spitze. die ganze menu integrierung ist ideal, weil fast alles bei mir auf shell basiert.
nur den skin würde ich gerne tweaken.
noch besser, wenn ich statt der ChoiceBox den von dir eingebauten Skin benutzen könnte. Dann wäre es einheitlich, egal welchen skin man drauf hat.
na ja eigentlich ist es andersrum, das für die choicebox die globalen skin einstellungne greifen soltlen, damit diese auch von dort skinnable sind und an das look & feel des jeweiligen skinn angepasst werden können - aber wie gesagt, viel geht da eh nicht
Fettdruck und andere farben habe ich mir auch schon gewünscht, aber das spielt es halt nicht
Und ja, das MF ist eigentlich als python shellwrapper entstanden...
Natürlich kannst du auch im Hauptmenu schon die Choice box verwenden, das ist nur cut & paste in plugin.py aber so gefiel es mir halt besser, und verhindert auch das readme.txt und about unterdrückt werden können - weil hardcoded
Auf den shift+farbtasten mit color.cfg kannst du aber auch direkt in ein menu springen, da siehst du wie das geht.
LG
gutemine
ich glaub ich wär zufrieden, wenn er in deinem skin bleibt und die untermenus in deinen skin aufruft.
muss ja nicht schick sein. mit eigenem title ist schon ok. ausserdem kann man ja Pixmaps einbauen. Bildchen hab ich also schon in dein hauptmenu eingebaut. theoretisch kann ich damit auch skin rahmen etc. basteln.
wenn ich den titel ausblende sowieso. ich glaub da kann man schon einiges machen, nur halt etwas weniger komfortabel.
aber wie kriege ich die untermenus dazu den skin des hauptmenu aufzurufen?
hab versucht in def FantasticMenu(self,status): die zeile
self.session.openWithCallback(self.FantasticMenuSelected,ChoiceBox,mfmenudescr,self.ListMenuFantastic())
mit
zu ersetzen, aber das was offensichtlich nicht.
könntest du mir da weiterhelfen? soll einfach nur für die untermenus den skin des hauptmenus benutzen
ich glaube für das ausgeben des LCD habe ich auch in der unterclasse eine eigene skin variable verwendet - um dort den LCD Text positionieren zu können
Und withCallback nur mit Callback routine aufzurufen ohne etwas das wenn es fertig ist diese aufrufen soll (weil die parameter dann weiterrutschen) kann nicht gut gehen, du müsstest wenigstens deine eigene routine rein tun, dort skin definieren und evt die ChoiceBox dann aufrufen - vieleicht gehts, vieleicht auch nicht.
ob das mit der ChoiceBox auch geht um wenigstens position und farbe anzupassen weis ich aber nicht mehr - das MF habe ich schon fast 1 jahr nur für Kleinigkeiten angegriffen
Du kannst es aber gerne ein bischen aktualisieren, optimieren und neue version machen, die anderne Freuen sich sicher
Das einzige wirklich lustige beim MF zu machen war die simple art command line interpretor für die *.cfg files
das mit dem : und splitten der textstrings zu machen statt sich lange mit einem xml oder ähnlichem zu qälen war eigentlich auch das einzige wirklich kreative dran
genau das macht halt den leuten das menu schreiben leicht, weswegen es immer noch recht beliebt ist - weil cut & paste von zeilen und nur text ändern ist halt simpler als sich mit spitzen klammern oder gleich dem python zu qälen, und beispiele sind ja genug dabei.
LG
gutemine
nur damit ich nicht noch an der falschen stelle suche, ich sehs doch richtig, dass ich einzig def FantasticMenu(self,status): anpassen muss?
oder muss ich def FantasticMenuSelected(self,mfselected): anpassen? oder beide?
ersteres ist zumindest das einzige mit einer ChoiceBox referenz.
In der FantasticMenu wird das menu file gelesen und dann die ChoiceBox mit FantasticmenuSelected als Callback aufgerufen, wenn du dort statt ChoiceBox was anderes aufrufst das eben wieder eine skin variable enthält und einen skin lädt so ähnlich wie die FantasticLCD routine das macht könnte dieser auch greifen - vieleicht
Trotzdem werden aber nur wenige der üblichen skinn attribute greifen weil vom aussehen der ChoiceBox eben sehr viel C++ teil vom enigma2 hardcoded ist, bzw. einnfach vom standardskinn übernommen wird.
Und ein ukepg gibts im standard MF nicht, ich weis das aber gemoddede versionen davon im Umlauf sind wo auch andere Sachen reingepackt wurden
LG
gutemine
PS: Kleiner tipp noch - das Extensions menu auf der Blauen taste ist auch eine ChoiceBox wenn ich mich recht erinnere, schau dir in den verschiedenen skinns an was daran gemodded wird, dann siehst du was machbar ist und was nicht - und nicht vergessen, mit python kenne ich mich eigentlich gar nicht aus
garnicht so einfach.
lcd wird scheinbar einfach mit
aufgerufen, wenn ich das richtig sehe und ist definiert mit
die choicebox mit
self.session.openWithCallback(self.FantasticMenuSelected,ChoiceBox,mfmenudescr,self.ListMenuFantastic())
in
class Fantastic(Screen):
skin = """
<screen position="100,100" size="500,400" title="Fantastic" >
</screen>"""
def __init__(self, session, args = 0):
self.skin = Fantastic.skin
self.session = session
Screen.__init__(self, session)
self.menu = args
müsste man doch eigentlich dann nur exakt argumente an den screen melden. self und session, richtig? nur was sind die beiden?
self = self.FantasticMenuSelected
session = mfmenudescr
???
wenn ich nämlich einfach choicebox ersetze und sonst nix ändere (übergebene argumente o.ä) krieg ich mal gleich nen GS beim untermenu-aufruf
QuoteDisplay MoreTraceback (most recent call last):
File "/home/teamducktales/dt/tufsbox/cdkroot/usr/lib/enigma2/python/Components/ActionMap.py", line 46, in action
File "/usr/lib/enigma2/python/Plugins/Extensions/Fantastic/plugin.py", line 287, in FantasticMainMenu
self.FantasticMenuSelected(mfselected)
File "/usr/lib/enigma2/python/Plugins/Extensions/Fantastic/plugin.py", line 557, in FantasticMenuSelected
self.FantasticMenu("")
File "/usr/lib/enigma2/python/Plugins/Extensions/Fantastic/plugin.py", line 336, in FantasticMenu
self.session.openWithCallback(self.FantasticMenuSelected,Fantastic,mfmenudescr,self.ListMenuFantastic())
File "/usr/lib/enigma2/python/mytest.py", line 274, in openWithCallback
dlg = self.open(screen, *arguments, **kwargs)
File "/usr/lib/enigma2/python/mytest.py", line 285, in open
dlg.isTmp = True
AttributeError: 'NoneType' object has no attribute 'isTmp'
QuoteOriginal von gutemine
Und ein ukepg gibts im standard MF nicht, ich weis das aber gemoddede versionen davon im Umlauf sind wo auch andere Sachen reingepackt wurden
nene, ist schon dein original aus diesem thread. hatte den namen nur an der stelle vorher mal geändert und vergessen hier zurück zu ändern.
ist nach wie vor dein skritp.
kriegs leider nicht alleine hin
hab deinen default nun komplett angepasst. wenn es jetzt noch irgendwie möglich wäre nicht die choicebox aufzurufen....
weiss jemand rat?
ich verstehe nicht ganz dein problem, natürlich kannst du statt der ChoiceBox auch so wie in der Hauptclasse mit einer ActionMap und dem MenuList arbeiten 8und das wäre dann sofort skinnable - das beispiel dazu ist ja eh im Hauptmenu ersichtlich.
Das schöne an der ChoiceBox ist halt das die sich dynamisch anpasst, abhängig von der anzahl der menueinträge. länge der texte, automatische keys von 1..9 und dan farbtasten für die direktanwahl der menupunkte, .. und das verlierst du dann halt bzw. musst dich selber drum kümmern
ich nochmal
so ein ärger.
ich hatte alles fix und fertig und hab mein fertiges plugin dann versehentlich gekillt und musste nun alles wieder herstellen.
mein letztes problem ist nun nur noch der aufruf des plugins via fantastic menu.
rufe ich mit der option "E:blah:blah.sh" auf, dann läuft es nicht. Rufe ich mit "C:blah:blah.sh" auf dann läuft es.
Ich kann mich nicht mehr erinnern, was ich damals benutzt hatte.
Das Programm muss sozusagen im Hintergrund weiter überwacht werden. Sprich wenn man es z.b. per telnet öffnet und dann telnet-konsole schliesst, dann bricht das programm ab.
deshalb läuft es vermutlich mit C: da hierbei eine konsole offen bleibt.
kann man das irgendwie anders erreichen, ohne die console dauerhaft einzublenden? sozusagen im hintergrund aber ohne es zu schliessen?
Shit happens
A: gäbe es noch, evt. mit einem & dran, das ist dann nur ein application container.
Aber die idee der console ist halt das es wartet bis du fertig ist.
Du kannst es zwar mit den nohup binary (ist im orwell dabei) auch als dameon starten (schau dir im orwell plugin an wie es benutzt wird) aber wirklich schön ist das auch nicht.
LG
gutemine
A: funktioniert leider nicht. führt zum crash
EDIT: habs jetzt aber wieder hingekriegt. bin nochmal die verfügbaren optionen aus dem skript durchgegangen.
kann sein das es crashed, an den application containern hat sich im CVS einiges getan, na ja vieleicht wenn ich mal zeit habe es mir anzusehen/es zu fixen
Aber du hast jetzt einen meiner Lieblingssprüche entdeckt:
Irgendwie geht es immer (weiter)
LG
gutemine
ich versuche mich gerade erneut am FM, bietet ja ein großes Feld an Möglichkeiten
was ich absolut nicht gebacken bekomme (geht es denn überhaupt?):
wenn ich ein Plugin aufrufe, z.B.:
elif mftextargument == "Cronmanager":
self.session.openWithCallback(self.FantasticMenu(""),Cronmanager)
wie kann ich veranlassen, das sich dabei FM gleich beendet? Also nach dem beenden des Cronmanager will ich nicht zurück ins FM sondern alles beendet haben
dann machst du halt kein openwithcallback des mainmenus sondern nur ein open
habe ich gemacht, wenn ich das aufgerufene Plugin beende, habe ich dennoch das FM-Menü wieder da
edit: ein self(close) dahinter wirkt Wunder
aber doch noch ne Frage: im Gegensatz zu einem anderen Schreiber möchte ich bei Direktaufruf eines Menüs (z.B. green.cfg) gerne die Choicebox haben, wegen der direkten Wahlmöglichkeit per Zahlentaste. Ich habe ne ganze Weile dran rumgedoktert, bekomme es aber einfach nicht hin (Problem: irgendwas mit modal, soweit ich es verstehe = keine ChoiceBox wenn der Hauptscreen nicht fertig ist?)
zur Zeit sind 15 Mitglieder (davon 3 unsichtbar) und 28 Gäste online - Record: 5,681 Users ()