Button Hintergrundfarbe
@problembär: Versuch mal wie weit Du bei Wikipedia kommst, in dem Du Artikel anlegst nach der Devise „hauptsache er ist erst einmal da, inhaltliche Korrektheit kommt dann schon”. Da fliegst Du recht schnell raus. Bei Wikipedia kannst Du das immerhin versuchen, bei OpenSource kommst Du dagegen noch nicht einmal so weit. Versuch mal Quark in den Linux-Quelltext zu schreiben. Das kannst Du in Deinem privaten Kämmerlein tun, aber in offizielle Repositories wirst Du das nicht bekommen. Da findet nämlich im Gegensatz zum Forum oder bei Wikipedia in aller Regel eine Zugangskontrolle statt, die sicherstellt, dass eine gewisse Qualifikation vorhanden ist. Nicht nur das — man sollte auch den jeweiligen Style-Guides der Projekte folgen. Denn auch das sind in der Regel KO-Kriterien, selbst wenn eine Programmänderung syntaktisch korrekt ist *und* auch das tut was sie soll.
Du bestreitest das jeder Moderator die technischen Möglichkeiten hätte a) Deine Beiträge zu ändern oder zu löschen oder b) sogar Dein komplettes Benutzerkonto zu löschen? Oder bezweifelst Du dass die Moderation insgesamt so etwas in besonders ausufernden Fällen auch befürworten würde? Oder geht es Dir darum dass Du glaubst dann ein Gerichtsverfahren auf Grundlage von GG §5 führen zu können?
Du bestreitest das jeder Moderator die technischen Möglichkeiten hätte a) Deine Beiträge zu ändern oder zu löschen oder b) sogar Dein komplettes Benutzerkonto zu löschen? Oder bezweifelst Du dass die Moderation insgesamt so etwas in besonders ausufernden Fällen auch befürworten würde? Oder geht es Dir darum dass Du glaubst dann ein Gerichtsverfahren auf Grundlage von GG §5 führen zu können?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Da gibt es viele Gründe dafür.problembaer hat geschrieben:Wieso sollte lauffähiger Python-Code Quark sein und wieso der, der ihn schreibt, Quarkproduzent
Als erstes muss ein Algorithmus robust sein, d.h. auch in Grenzfällen funktionieren oder sinnvolle Fehlerrückmeldungen geben.
Als nächstes spielt da die Komplexität eines Algorithmus eine zentrale Rolle. Unter der Bedingung, dass zwei Algorithmen korrekt funktionieren und das gegebene Problem lösen, so wählt man idR. denjenigen, der das bessere Laufzeitverhalten hat.
Als letztes fällt mir spontan dann noch die Verletzung von Sprach typischen Idiomen ein. Oftmals hängt das auch mit den ersten Punkten zusammen, aber es kann davon unabhängig auch ein Kriterium sein, welches einen Code-Schnipsel als "schlecht" definierbar macht.
Ich denke das Hauptproblem mit Deinen Hilfestellungen ist, dass Du selber nicht lernwillig bist oder Dich zumindest hier so präsentierst. Du stellst hier Kritik immer als Anfeindung dar, in Wirklichkeit kommt es zu "genervten" Äußerungen von Forenmitgliedern eher dadurch, dass Du zum x-ten Mal denselben schlechten Code postest, obwohl Du darauf schon x-Mal hingewiesen wurdest. Anstelle das einmal anzunehmen, das zu durchdenken und schließlich selber korrekt anzuwenden, versteifst Du Dich auf Sturheit und redest Dich mit Schlagworten wie "Meinungsfreiheut" heraus. Ich denke, wenn Du hier mal sichtbar Lernbereitschaft zeigtest - wie etwa auf deets Klarstellung zum Thema Klassen- vs. Instanzattribut einzugehen - dann würden die Postings an Dich auch an Schärfe verlieren und schließlich ein entspanntes Verhältnis wieder Einzug halten
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 14
- Registriert: Freitag 17. Februar 2012, 17:38
Okok! Ganz ruhig! Wollt ja nicht gleich dass ihr zu streiten beginnt!
Hab noch eine Frage: Kann man durch einen Button unter 'command' die Funktion schließen [main.destroy()] und eine Unterfunktion GLEICHZEITIG aufrufen??
Mfg
Hab noch eine Frage: Kann man durch einen Button unter 'command' die Funktion schließen [main.destroy()] und eine Unterfunktion GLEICHZEITIG aufrufen??
Mfg
@LIFE-CUBES
Fuer die Streitereien kannst du ja nix...
Code: Alles auswählen
def meine_funktion():
erste_funktion()
zweite_funktion()
-
- User
- Beiträge: 14
- Registriert: Freitag 17. Februar 2012, 17:38
So hätt ich das auch schon ausprobiert, aber ich kann keine unterfunktion in einer unter-unterfunktion schließen!
Werd das mal kurz demonstrieren:
Werd das mal kurz demonstrieren:
Code: Alles auswählen
from Tkinter import *
from sys import stdout, exit
def destroy():
button.destroy()
def unterfunktion():
button=Toplevel()
button = Button(button, text='Schließen!', command=destroy)
button.pack( )
button.mainloop( )
widget = Button(None, text='Unterfunktion', command=unterfunktion )
widget.pack( )
widget.mainloop( )
Hi LIFE-CUBES & Forumfreunde
Meinst du so etwas?:
Gruß wuf
Uh das gab beinahe eine Kollision
Meinst du so etwas?:
Code: Alles auswählen
import Tkinter as tk
def killing_me_softly():
do_still_something()
app_win.destroy()
def do_still_something():
print"Good Bye!"
app_win = tk.Tk()
app_win.protocol("WM_DELETE_WINDOW", killing_me_softly)
button = tk.Button(app_win, text='Beenden', command=lambda:killing_me_softly())
button.pack()
app_win.mainloop()
Uh das gab beinahe eine Kollision
Take it easy Mates!
Ich weiss nicht, was das heissen soll - aber "kann nicht" sollte (wie auch schon bei anderen Posts von dir) mit einer konkreten Fehlermeldung daher kommen. Und in deinem Fall liegt das daran (denke ich, wissen kann man's ja nicht...), dass du "button" nicht global definiert hast.LIFE-CUBES hat geschrieben:So hätt ich das auch schon ausprobiert, aber ich kann keine unterfunktion in einer unter-unterfunktion schließen!
-
- User
- Beiträge: 14
- Registriert: Freitag 17. Februar 2012, 17:38
Will eigentlich nur die Hintergrundfarbe des Buttons ändern. Klickt man in der Unterfunktion auf schließen und schließt die Unterfunktion dann manuell, dann hat sich die Hintergrundfarbe auf grün geändert...
Will das ganze nur automatisieren, aber seht selbst:
Will das ganze nur automatisieren, aber seht selbst:
Code: Alles auswählen
from Tkinter import *
from sys import stdout, exit
global VARIABLE
VARIABLE='white'
def destroy():
global VARIABLE
VARIABLE='green' #Will noch eine Variable setzen
button.destroy()
#und die unterfunktion wieder ausführen ev. mit
button.mainloop()
def unterfunktion():
button=Toplevel()
button = Button(button, text='Schließen!', command=destroy) #im button.config befindet sich eben die Variable
button.config(bg=VARIABLE)
button.pack( )
button.mainloop( )
widget=Tk()
widget = Button(None, text='Unterfunktion', command=unterfunktion )
widget.pack( )
widget.mainloop( )
Hi LIFE-CUBES
Dein Snippet enthält diverse Fehler!
Würde dir auch empfehlen einmal die PEP-8 Story näher anzuschauen. Mein Haupsprache ist deutsch. Kannst du einmal versuchen deine Aufgabe in klarem interpretierbarem deutsch zu beschreiben. Es wäre schön von dir zu erfahren ob der von uns in diesem Forum platzierte Code(Snippets) bei dir auch funktionieren.
Gruß wuf
Dein Snippet enthält diverse Fehler!
Braucht es nichtLIFE-CUBES hat geschrieben:Code: Alles auswählen
global VARIABLE
Gross geschriebenes ist für mich nicht eine Variable sondern eine Konstante. Und Konstanten ändert man normalerweise im Programmablauf nicht.LIFE-CUBES hat geschrieben:Code: Alles auswählen
VARIABLE='white'
Hier überschreibst du die Toplevel-Instanz mit der Button-Instanz! Für die Toplevel- und Button-Instanz unterschiedliche Namen verwenden!LIFE-CUBES hat geschrieben:Code: Alles auswählen
button=Toplevel() button = Button(button, text='Schließen!', command=destroy) #im button.config befindet sich eben die Variable button.config(bg=VARIABLE) button.pack( ) button.mainloop( )
Hier überschreibst du die widget(root)-Instanz mit der Button-Instant! Für die Tk- und Button-Instanz unterschiedliche Namen verwenden!LIFE-CUBES hat geschrieben:Code: Alles auswählen
widget=Tk() widget = Button(None, text='Unterfunktion', command=unterfunktion ) widget.pack( ) widget.mainloop( )
xxx.mainloop braucht es nur einmal und nicht dreimal! Hier zum beispiel nur widget.mainloop()Code: Alles auswählen
xxx.mainloop( )
Würde dir auch empfehlen einmal die PEP-8 Story näher anzuschauen. Mein Haupsprache ist deutsch. Kannst du einmal versuchen deine Aufgabe in klarem interpretierbarem deutsch zu beschreiben. Es wäre schön von dir zu erfahren ob der von uns in diesem Forum platzierte Code(Snippets) bei dir auch funktionieren.
Gruß wuf
Take it easy Mates!
-
- User
- Beiträge: 14
- Registriert: Freitag 17. Februar 2012, 17:38
1.: global brauch ich, sonst wird die (großgeschriebene) variable nicht gesetzt und ich kann sie in unterfunktionen nicht mehr benutzen
2.: ob groß oder klein --> egal!? weil ich sie ja definiere
3.:es hilft mir bei meinem eigentlichen problem nicht!
es gibt ja keine fehlermeldungen, probierts es doch mal aus! ich will einfach nur die config bei einem button ändern!
das kleine programm von oben funktioniert eigentlich, nur die automatisation fehlt mir!!!
mfg
2.: ob groß oder klein --> egal!? weil ich sie ja definiere
3.:es hilft mir bei meinem eigentlichen problem nicht!
es gibt ja keine fehlermeldungen, probierts es doch mal aus! ich will einfach nur die config bei einem button ändern!
das kleine programm von oben funktioniert eigentlich, nur die automatisation fehlt mir!!!
mfg
-
- User
- Beiträge: 14
- Registriert: Freitag 17. Februar 2012, 17:38
besser so?
Code: Alles auswählen
from Tkinter import *
from sys import stdout, exit
VARIABLE='white'
def destroy():
global VARIABLE
VARIABLE='green' #Will noch eine Variable setzen
frame.destroy()
#und die unterfunktion wieder ausführen ev. mit
def unterfunktion():
frame=Toplevel()
button = Button(frame, text='Schließen!', command=destroy) #im button.config befindet sich eben die Variable
button.config(bg=VARIABLE)
button.pack( )
main=Tk()
widget = Button(main, text='Unterfunktion', command=unterfunktion )
widget.pack( )
main.mainloop( )
Hi LIFE-CUBES
Habe dein vorheriges Skript einmal versucht abzuändern so wie ich die Funktion aus dem Skript interpretiere.
Dein letztes Post werde ich gleich noch anschauen.
Gruß wuf
Habe dein vorheriges Skript einmal versucht abzuändern so wie ich die Funktion aus dem Skript interpretiere.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import Tkinter as tk
def destroy():
app_win.variable = 'green'
app_win.toplevel_win.destroy()
def unterfunktion():
app_win.toplevel_win = tk.Toplevel()
tk.Button(app_win.toplevel_win, text='Schließen!', bg=app_win.variable,
command=destroy).pack( )
app_win = tk.Tk()
app_win.variable = 'white'
app_win.button_01 = tk.Button(app_win, text='Unterfunktion', command=unterfunktion )
app_win.button_01.pack()
app_win.mainloop( )
Gruß wuf
Take it easy Mates!
-
- User
- Beiträge: 14
- Registriert: Freitag 17. Februar 2012, 17:38
Ich könnt dich küssen! Das ist es!!!
OK LIFE-CUBES
Dein letztes Skript ist schon bedeutend besser! Ich habe es noch so abgeändert, dass es keine Exceptions mehr wirft. Die Funktion 'destroy' konnte die Toplevel-Instanz 'frame' noch nicht sehen. Machte sie deshalb global. Global ist obwohl die Sprache Python sie in ihrem Wort-Vokabular hat verpöhnt. Aber für ein kleines Versuchsskript ist seine Anwendung keine Schande. Bei grösseren Programmen könnte es aber zu schwer auffindbaren Fehlern führen. Beim meinem Skript habe ich die global benötigten namen an die Instanz 'app_win' gebunden. Dies könnte aber auch zu Problemen führen da Attribute in der 'app_win'-Instanz, welche die gleiche Namen besitzen überschrieben werden könnten. Werde dein Skript noch näher anschauen um das Geisterwort 'global' zu eliminieren.
Gruß wuf
Dein letztes Skript ist schon bedeutend besser! Ich habe es noch so abgeändert, dass es keine Exceptions mehr wirft. Die Funktion 'destroy' konnte die Toplevel-Instanz 'frame' noch nicht sehen. Machte sie deshalb global. Global ist obwohl die Sprache Python sie in ihrem Wort-Vokabular hat verpöhnt. Aber für ein kleines Versuchsskript ist seine Anwendung keine Schande. Bei grösseren Programmen könnte es aber zu schwer auffindbaren Fehlern führen. Beim meinem Skript habe ich die global benötigten namen an die Instanz 'app_win' gebunden. Dies könnte aber auch zu Problemen führen da Attribute in der 'app_win'-Instanz, welche die gleiche Namen besitzen überschrieben werden könnten. Werde dein Skript noch näher anschauen um das Geisterwort 'global' zu eliminieren.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from Tkinter import *
from sys import stdout, exit
VARIABLE='white'
def destroy():
global VARIABLE, frame
VARIABLE='green' #Will noch eine Variable setzen
frame.destroy()
#und die unterfunktion wieder ausführen ev. mit
def unterfunktion():
global frame
frame=Toplevel()
button = Button(frame, text='Schließen!', command=destroy) #im button.config befindet sich eben die Variable
button.config(bg=VARIABLE)
button.pack( )
main=Tk()
widget = Button(main, text='Unterfunktion', command=unterfunktion )
widget.pack( )
main.mainloop( )
Take it easy Mates!
-
- User
- Beiträge: 14
- Registriert: Freitag 17. Februar 2012, 17:38
Danke vielmals! Hast mir wirklich weiterhelfen können!
MfG
MfG
Hi LIFE-CUBES
Hier noch meine Variante das 'global' mit einer Hilfsklasse 'App' zu eliminieren. Man kann dann gobal verwendete Namen als Attribute an die Instanz 'app' der Klasse 'App' binden. Da haben eventuell unsere Forum-Kollegen noch bessere Lösungen.
Gruß wuf
Hier noch meine Variante das 'global' mit einer Hilfsklasse 'App' zu eliminieren. Man kann dann gobal verwendete Namen als Attribute an die Instanz 'app' der Klasse 'App' binden. Da haben eventuell unsere Forum-Kollegen noch bessere Lösungen.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from Tkinter import *
from sys import stdout, exit
def destroy(frame):
app.variable='green'
frame.destroy()
def unterfunktion():
frame=Toplevel()
Button(frame, text='Schließen!', bg=app.variable,
command=lambda:destroy(frame)).pack()
class App(object):
def __init__(self):
pass
main=Tk()
app = App()
app.variable = 'white'
Button(main, text='Unterfunktion', command=lambda:unterfunktion()).pack()
main.mainloop()
Take it easy Mates!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Kleiner, etwas später Hinweis, weil ich das grad sehe:
würde man besser als
schreiben, denn es ist sinnlos einen Funktionsaufruf in eine Funktion zu packen. Merkregel: wenn man ``lambda`` im Code stehen hat, gibt es meist eine bessere Möglichkeit das Problem zu lösen.
Code: Alles auswählen
Button(main, text='Unterfunktion', command=lambda:unterfunktion()).pack()
Code: Alles auswählen
Button(main, text='Unterfunktion', command=unterfunktion).pack()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hi Leonidas
Hast du richtig festgestellt. Danke für den Hinweis.
Gruß wuf
Hast du richtig festgestellt. Danke für den Hinweis.
Meinst du damit etwa:Leonidas hat geschrieben:Merkregel: wenn man ``lambda`` im Code stehen hat, gibt es meist eine bessere Möglichkeit das Problem zu lösen.
Code: Alles auswählen
from functools import partial
Take it easy Mates!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Oft, ja. Manchmal aber auch ``operator.attrgetter`` (statt ``lambda foo: foo.baz``) und ``operator.itemgetter`` (statt ``lambda foo: foo[42]``). Ich persönlich find das klarer, aber da kann man sich streiten.wuf hat geschrieben:Meinst du damit etwa:Code: Alles auswählen
from functools import partial
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice