Ich bin ganz neu hier im Forum und auch noch nicht viel länger am Lernen der Programmiersprache Python.
Ich möchte mehrere Buttons erstellen, die immer wieder die gleichen Eigenschaften (width, height, bg, fg, etc.) haben sollen. Um mir die wiederholte Arbeit zu sparen und eine allfällige Änderung effizienter zu gestalten, dachte ich an eine for-Schleife. Das funktioniert soweit auch:
import tkinter
button = ["variable", "operator", "tupel"]
main = tkinter.Tk()
for x in button:
x = tkinter.Button(main, width=8, height=1, text=x, bg="#2b2b2b", fg="#a9b7c6")
x.pack()
main.mainloop()
Nun kann es aber vorkommen, dass ich bei einem Button z.B. "height=2" angeben möchte. Leider kann ich mit "variable["text"] nicht darauf zugreifen.
Fehlermeldung: "NameError: name 'variable' is not defined"
Was würdet ihr vorschlagen, um dies am einfachsten zu lösen?
(falls sowas ähnliches schonmal besprochen wurde, sorry für die Wiederholung, aber ich habe nichts passendes gefunden)
Vielen Dank für die rasche Antwort. Die "texts" werden so in einem dictionary gespeichert:
{'variable': <tkinter.Button object .!button>, 'operator': <tkinter.Button object .!button2>, 'tupel': <tkinter.Button object .!button3>}
Wie kann ich darauf zugreifen, wenn ich z. B. bei einem der drei Buttons die Höhe oder Breite ändern möchte?
Es sollen mit einem einfachen Code über 15 verschiedene Buttons (können später auch einige mehr werden) erzeugt werden. Es kann aber durchaus vorkommen, dass evtl. mal eben die Breite oder Höhe angepasst werden muss.
Danke für die Info. Ich bin hier um zu lernen und Fragen zu klären.
Sorry, wenn ich Dir hierbei nicht folgen kann. Meinst du "keys" und "values"? Als value erhalten ich ".!button". Ich verstehe nicht, wie ich nun auf Parameter wie "width" oder "text" von diesem "value" zugreifen bzw. dies ändern kann.
Bitte entschuldigen, falls es sich hierbei um völlige basics handelt, aber jeder hat wohl mal klein angefangen. In den Tutorials finde ich nur "einfache" dictionaries, wobei die keys und values normalerweise strings oder integer sind.
Du verwechselst gerade die Darstellung eines Objektes wenn es einfach per print ausgibt, und das was es wirklich ist. Dein Button ist nicht .!button. Sonder ein Button-Objekt, auf dem du arbeiten kannst. Also kannst du
gibt es eine Regel für das 'eventuelle' anpassen der Breite oder Höhe?
Für den Anfang wäre es doch sicherlich mal sinnvoller die Größe so zu wählen, dass die für alle Buttons passt.
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
@deets: ich kann weder zu "button_to_change" noch zu "button_mapping" im Netz etwas finden.
@Dennis89: nein, es gibt keine Regel dafür. Ich schreib kurz einen Ausschnitt aus meinem "Projekt", sodass es hoffentlich verständlicher wirkt.
ich habe es momentan so gelöst, dass die Eigenschaften (wie Höhe, Breite, Hinter- und Vordergrundfarbe der Buttons) in einer Definition (btnprob) gespeichert sind. Neben diesen drei oben aufgeführten Buttons sind aktuell noch 18 weitere im gleichen Fenster, und es können durchaus noch mehr werden. Das einzige, was sich immer ändert sind "text" und "command". Der Rest bleibt normalerweise gleich.
Wie ihr sehen könnt, habe ich beim pw generator die Höhe auf 2 geändert. Dies bildet die Ausnahme.
Mein Vorstellung wäre, dass ich nicht alle Buttons wie oben aufgeführt auflisten muss, sondern dass dies mit einer Schleife erstellt werden kann. Das Projekt an und für sich ist eine Übung für mich, um mich mit Python vertraut zu machen. Es soll quasi ein Hilfsprogramm werden, in dem ich die Basis-Informationen zu verschiedenen Themen aufrufen kann (Klick auf Button zeigt Text in Label).
Bei meinem aktuelle Wissensstand scheint mir dies eine vernünftige Übung zu sein.
fencestake hat geschrieben: Mittwoch 16. Dezember 2020, 06:42
@deets: ich kann weder zu "button_to_change" noch zu "button_mapping" im Netz etwas finden.
Das sind Namen von Variablen.
button_mapping ist ein dictionary. Der Wert mit dem Schlüssrl "variable" wird zusätzlich an den Namen "button_to_change" gebunden.
Das ist absolute Grundlage. Ich würde vorschlagen, das offizielle Python Tutorial in der Dokumentation durch zu arbeiten, um ein Verständnis für die Sprache zu bekommen.
Hallo fencestake,
das ist bestimmt, was du willst...
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# GUI module generated by PAGE version 6.0
# in conjunction with Tcl version 8.6
# Dec 26, 2020 12:31:19 AM CET platform: Windows NT
import sys
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
def vp_start_gui():
'''Starting point when module is the main routine.'''
global val, w, root, screen_width, screen_height, f2
root = tk.Tk()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
print(screen_width)
top = Toplevel1 (root)
root.mainloop()
w = None
class Toplevel1:
def __init__(self, top=None):
'''This class configures and populates the toplevel window.
top is the toplevel containing window.'''
_bgcolor = '#d9d9d9' # X11 color: 'gray85'
_fgcolor = '#000000' # X11 color: 'black'
_compcolor = '#d9d9d9' # X11 color: 'gray85'
_ana1color = '#d9d9d9' # X11 color: 'gray85'
_ana2color = '#ececec' # Closest X11 color: 'gray92'
top_width = 800
top_height = 600
top_x = 279
top_y = 154
MissMapeL hat geschrieben: Montag 28. Dezember 2020, 22:58
Hallo fencestake,
das ist bestimmt, was du willst...
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# GUI module generated by PAGE version 6.0
# in conjunction with Tcl version 8.6
# Dec 26, 2020 12:31:19 AM CET platform: Windows NT
import sys
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
def vp_start_gui():
'''Starting point when module is the main routine.'''
global val, w, root, screen_width, screen_height, f2
root = tk.Tk()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
print(screen_width)
top = Toplevel1 (root)
root.mainloop()
w = None
class Toplevel1:
def __init__(self, top=None):
'''This class configures and populates the toplevel window.
top is the toplevel containing window.'''
_bgcolor = '#d9d9d9' # X11 color: 'gray85'
_fgcolor = '#000000' # X11 color: 'black'
_compcolor = '#d9d9d9' # X11 color: 'gray85'
_ana1color = '#d9d9d9' # X11 color: 'gray85'
_ana2color = '#ececec' # Closest X11 color: 'gray92'
top_width = 800
top_height = 600
top_x = 279
top_y = 154
Lieber blackjack,
wenn Du nur negative Kritik üben kannst - lass es doch besser.
Dieses Forum ist doch dafür da, dass man etwas lernen kann. - Und aus deinem Satz: "Das will bestimmt niemand. PAGE generiert extrem besch…eidenen Quelltext." lernt niemand etwas.
- Sag doch lieber was an Page schlecht ist!
- Schau dir dann das von mir geschriebene Programm an (und nicht bloß den header) und kritisiere konkret.
- Ja, ich bin noch Anfänger in Python, deshalb habe ich gedacht, ich könnte mit meinem Programmcode weiterhelfen.
Wenn dem nicht so ist, braucht das ja niemand zu verwenden.
Letztendlich verstehe ich deine - und so lese ich es - aggressive Antwort nicht!
Trotzdem wünsche ich dir ein schönes, gesundes und friedliches 2021.
@MissMapeL: Es ist egal was an PAGE schlecht ist, denn das kannst Du ja sowieso nicht ändern, das hat/haben der/die Autor(en) von PAGE verbockt. Was man daraus lernen kann, und ja das hätte ich vielleicht explizit schreiben sollen: Verwende kein PAGE! Der Quelltext der da raus kommt ist nicht nur unpythonisch sondern auch ganz allgemein schlecht und wirr. Mehr als den Header brauche ich mir da konkret auch nicht anschauen, denn ich weiss ja, dass danach Müll kommt. Der ist auch nicht reparierbar ohne das man ihn gleich komplett neu schreiben würde.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari