Hallo in die Runde,
ich habe folgendes Problem: meine Textfelder passen sich nicht dynamisch an, egal ob ich sie in ein .grid einbinde oder auf ein Frame.
Wenn ich width und height angebe verändern sie sich natürlich nicht dynamisch, wenn ich die Angabe weglasse werden die Felder riesig groß und überschreiten bei mehreren Textfeldern meinen Screen.
Wer hat Erfahrungen damit und kann mir sagen, warum
1. die Textfelder ohne width / height so riesig groß werden bzw wie man das anders einstellen kann
2. sich nicht flexibel anpassen
Kennt jemand eine Lösung dafür?
Ich hatte das gleiche Problem bei der Anpassung von Schrift und dort eine prozentuale Formel erstellt, die die Schrift ungefähr mit vergrößert - und Schrift ist ja in Pixeln angegeben - die width und heigth-Angaben eines Textfeldes sind es aber nicht. Wenn ich das prozentual umrechnen möchte, gibt es da hinterlegte Werte? Ein height / Zeile = x Pixel, ein width / Buchstabe, Zeichen = x Pixel?
Vielleicht gibt es ja auch eine ganz andere einfachere Lösung. Ich habe auch schon überlegt auf kivy 'umzusteigen', da man damit angeblich responsive gestalten kann - nur hätten die Textfelder dann vielleicht das gleiche Problem. Weiß jemand ob es dort geht?
Bitte um Erfahrungswerte. Wie macht ihr die Anpassung eines Textfeldes, wenn sich das Hauptfenster in der Größe verändert?
Danke schön.
Hier ein Beispiel, wie es leider nicht angepasst wird:
from tkinter import *
app = Tk()
app.title("")
app.wm_state("zoomed")
# ------------------------------------------------------------------------------
def leer():
pass
# beenden mit Escape
def schliessen(event):
app.destroy()
app.bind_all('<Escape>', schliessen)
# -----------------------------------------------------------------------------
Frame_Textbereiche = Frame(app)
Frame_Textbereiche.pack(side=TOP, pady=100, padx=100, expand=TRUE, fill=BOTH)
# --------------------------------------------------------------------
benennen_1 = Text(Frame_Textbereiche,
bg="#FF99CC", font=("Arial", 11))
benennen_2 = Text(Frame_Textbereiche,
bg="#FFFFCC", font=("Arial", 11))
benennen_3 = Text(Frame_Textbereiche,
bg="lightblue", font=("Arial", 11))
textfenster_1 = Text(Frame_Textbereiche,
fg="lightblue", bg="lightblue",
font=("Arial", 11), wrap="word")
textfenster_2 = Text(Frame_Textbereiche,
fg="lightblue", bg="lightblue",
font=("Arial", 11), wrap="word")
textfenster_3 = Text(Frame_Textbereiche,
fg="white",
font=("Arial", 11), wrap="word")
textfenster_1.focus()
benennen_1.grid(row=0, column=0, sticky="nswe")
benennen_2.grid(row=0, column=1, sticky="nswe")
benennen_3.grid(row=0, column=2, sticky="nswe")
textfenster_1.grid(row=1, column=0, sticky="nswe")
textfenster_2.grid(row=1, column=1, sticky="nswe")
textfenster_3.grid(row=1, column=2, sticky="nswe")
app.mainloop()
Textfeld dynamisch vergrößern
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@MarKie: Sternchen-Importe sind Böse™. Da holt man sich gerade bei `tkinter` fast 140 Namen ins Modul von denen nur ein kleiner Bruchteil verwendet wird. Auch Namen die gar nicht in `tkinter` definiert werden, sondern ihrerseits von woanders importiert werden. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Man nummeriert keine Namen. Dann will man sich entweder bessere Namen überlegen, oder gar keine Einzelnamen/-werte verwenden, sondern eine Datenstruktur. Oft eine Liste.
`benennen` ist ein komischer Name für ein Texteingabe-Element. Und `text_fenster` ist gar kein Fenster.
`leer()` wird definiert aber nirgends verwendet.
An der Schriftgrösse sollte man besser nur relativ zur Grösse ändern die der Benutzer eingestellt hat.
Beim `grid()`-Layout muss man sagen welche Spalten und Zeilen sich ändern dürfen wenn sich die zur Verfügung stehende Fläche ändert. Das kann man auch verschieden gewichten.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Man nummeriert keine Namen. Dann will man sich entweder bessere Namen überlegen, oder gar keine Einzelnamen/-werte verwenden, sondern eine Datenstruktur. Oft eine Liste.
`benennen` ist ein komischer Name für ein Texteingabe-Element. Und `text_fenster` ist gar kein Fenster.
`leer()` wird definiert aber nirgends verwendet.
An der Schriftgrösse sollte man besser nur relativ zur Grösse ändern die der Benutzer eingestellt hat.
Beim `grid()`-Layout muss man sagen welche Spalten und Zeilen sich ändern dürfen wenn sich die zur Verfügung stehende Fläche ändert. Das kann man auch verschieden gewichten.
Code: Alles auswählen
import tkinter as tk
def main():
app = tk.Tk()
app.title("")
app.bind_all("<Escape>", lambda _event: app.quit())
textbereiche_frame = tk.Frame(app)
textbereiche_frame.pack(
side=tk.TOP, pady=100, padx=100, expand=True, fill=tk.BOTH
)
text_widgets = []
for column_index, (color_a, color_b) in enumerate(
[("#F9C", "lightblue"), ("#FFC", "lightblue"), ("lightblue", "white")]
):
text_widget_a = tk.Text(textbereiche_frame, bg=color_a)
text_widget_a.grid(row=0, column=column_index, sticky=tk.NSEW)
text_widget_b = tk.Text(textbereiche_frame, bg=color_b, wrap=tk.WORD)
text_widget_b.grid(row=1, column=column_index, sticky=tk.NSEW)
text_widgets.append((text_widget_a, text_widget_b))
textbereiche_frame.columnconfigure(column_index, weight=1)
textbereiche_frame.rowconfigure(0, weight=1)
textbereiche_frame.rowconfigure(1, weight=1)
text_widgets[0][1].focus()
app.mainloop()
if __name__ == "__main__":
main()
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Puh ... Lass mich doch bitte so programmieren, wie ich es mache. Danke.
Das mit dem .grid und der Gewichtung ist bekannt. Die Größe der Textfelder passt sich in einem .grid bei mir nicht dynamisch an, trotz Gewichtung. Und die Frage war, wie man Textfelder dynamisch vergrößert oder verkleinert bzw diese sich dem Fenster anpassen. Ein .grid macht diese Anpassung mit Buttons nach meiner Erfahrung nahezu perfekt. Textfelder werden aber nicht angepasst.
Falls es eine Lösung für die dynamische Anpassung von Textfeldern gibt, bitte posten. Danke schön.
Das mit dem .grid und der Gewichtung ist bekannt. Die Größe der Textfelder passt sich in einem .grid bei mir nicht dynamisch an, trotz Gewichtung. Und die Frage war, wie man Textfelder dynamisch vergrößert oder verkleinert bzw diese sich dem Fenster anpassen. Ein .grid macht diese Anpassung mit Buttons nach meiner Erfahrung nahezu perfekt. Textfelder werden aber nicht angepasst.
Falls es eine Lösung für die dynamische Anpassung von Textfeldern gibt, bitte posten. Danke schön.
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@MarKie: Also bei meinem Code passt sich die Grösse der Textfelder bei mir der Fenstergrösse an.
Du kannst auch gerne weiter Code schreiben der fehleranfälliger und unverständlicher ist als er sein müsste, und nur bei Dir auf dem Rechner so funktioniert, aber nicht auf anderen Systemen mit anderen Einstellungen und Hardwarevorgaben.
Du kannst auch gerne weiter Code schreiben der fehleranfälliger und unverständlicher ist als er sein müsste, und nur bei Dir auf dem Rechner so funktioniert, aber nicht auf anderen Systemen mit anderen Einstellungen und Hardwarevorgaben.
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Hier ebenso... (getestet auf einem Windows-Rechner, falls das hier relevant ist)__blackjack__ hat geschrieben: ↑Mittwoch 12. Februar 2025, 12:01 @MarKie: Also bei meinem Code passt sich die Grösse der Textfelder bei mir der Fenstergrösse an.
_______________________________________________________________________________
https://www.python-kurs.eu/index.php
https://learnxinyminutes.com/docs/python/ https://learnxinyminutes.com/docs/de-de/python-de/
https://quickref.me/python https://docs.python-guide.org/