Größe der Widgets verändern?

Fragen zu Tkinter.
Antworten
thomas223
User
Beiträge: 12
Registriert: Donnerstag 29. Juni 2017, 07:35

Hallo,
gibt es eine Möglichkeit die Größe von Label´s und Entry Widgets zu ändern?
Ich suche das schon seit Stunden.

Code: Alles auswählen

from tkinter import *

fenster=Tk()

fenster.title("RFID Schreib-Leseeinheit")
fenster.grid_rowconfigure(0, weight=1)
fenster.grid_rowconfigure(1, weight=1)
fenster.grid_rowconfigure(2, weight=1)
fenster.grid_rowconfigure(3, weight=1)
fenster.grid_rowconfigure(4, weight=1)
fenster.grid_rowconfigure(5, weight=1)
fenster.grid_rowconfigure(6, weight=1)
fenster.grid_rowconfigure(7, weight=1)
fenster.grid_rowconfigure(8, weight=1)
fenster.grid_rowconfigure(9, weight=1)
fenster.grid_columnconfigure(0, weight=1)
fenster.grid_columnconfigure(1, weight=1)
fenster.grid_columnconfigure(2, weight=1)

w= Label(fenster, text="RFID").grid(row=0, column=0,sticky=W)
w1= Label(fenster, text="Produckt:").grid(row=4,column=0,sticky=W)
w2= Label(fenster, text="Ch.B.:").grid(row=5,column=0,sticky=W)
w3= Label(fenster, text="MHD:").grid(row=6,column=0,sticky=W)
label1= Label(fenster, text="UID:      ?")
label1.grid(row=3,column=3,sticky=W)
w5= Label(fenster, text="Gelesene Daten:").grid(row=2,column=3,sticky=W)
w6= Label(fenster, text="Daten:").grid(row=2, column=1,sticky=W)
label2= Label(fenster, text="Artikel: ?")
label2.grid(row=4,column=3,sticky=W)
label3= Label(fenster, text="Ch.-B.: ?")
label3.grid(row=5,column=3,sticky=W)
label4= Label(fenster, text="MHD:   ?")
label4.grid(row=6,column=3,sticky=W)
e1 = Entry(fenster)
e1.grid(row=4, column=1)
e2 = Entry(fenster)
e2.grid(row=5, column=1)
e3 = Entry(fenster)
e3.grid(row=6, column=1)
button = Button(fenster, text='Übernemen', width=25, command=sendedaten)
button.grid(row=7,column=1)

fenster.mainloop()

Zuletzt geändert von Anonymous am Freitag 4. August 2017, 11:02, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@thomas223: Was soll denn da grösser werden? Suchst Du vielleicht einfach nur das `font`-Argument zum übergeben einer grösseren Schriftgrösse? Ansonsten sollte man eigentlich nicht an so etwas rumschrauben, denn der Benutzer wird sich bei den Systemeinstellungen ja etwas gedacht haben.
thomas223
User
Beiträge: 12
Registriert: Donnerstag 29. Juni 2017, 07:35

font scheint bei grid nicht zu funktionieren?
Die Oberfläche soll auf ein 10" Display im Vollbild laufen und ich möchte das die Widgets alles schön füllen.
Zur Zeit Ist das alles viel zu klein.
Super wäre es wenn es wie das grid_rowconfigure(6, weight=1) oder .grid_columnconfigure(0, weight=1) funktionieren würde.
BlackJack

@thomas223: Falls du meinst `font` ist kein Argument des `grid()`-Aufrufs, ja das stimmt. Wie kommst Du darauf das man *dort* die Schrift angeben kann?

Automatisch wird sich die Schriftgrösse nicht bestimmen lassen. Da musst Du probieren was passt.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

thomas223 hat geschrieben:Hallo,
gibt es eine Möglichkeit die Größe von Label´s und Entry Widgets zu ändern?
Ich suche das schon seit Stunden.
Also die Entries kannst Du schon größer machen. Die Labels auch, nur das macht bei den Labels keinen Unterschied, weil da dann die Schrift nicht größer wird. Wenn Du größere Labels willst, musst Du die Schriftgröße ändern.

Mit Deinem Layout stimmt auch einiges nicht:

Bild

Du hast hier 10 Zeilen und 3 Spalten. Aber die Labels rechts hast Du in die vierte Spalte (column 3) gesetzt. Die Entries und der Übernehmen Button könnten größer werden. Aber Du hast etwas Wichtiges vergessen. Du hast beim grid kein sticky gesetzt. Wenn Du sticky auf 'news' setzt, dann werden sie auch größer. Die Schrift dabei wird aber nicht größer!

Wenn der Button und die Entries nicht in der Höhe sondern nur in der Breite wachsen sollen, nimmst Du sticky 'ew'

Außerdem Produkt schreibt man nicht mit 'ck' und Übernehmen mit 'h'.

Wenn Du die Schrift bei den Labels größer machen möchtest, dann kannst Du sticky 'nsw' benutzen und die Label mit einem <Configure> event verknüpfen, das dann je nach Höhe eine größere Schrift nimmt. Geht beim Entry natürlich auch.
thomas223
User
Beiträge: 12
Registriert: Donnerstag 29. Juni 2017, 07:35

Danke für die Berichtigung, ist in erster Linie erst mal so nur hin gekleckst gewesen.

Wie sieht das mit Configure Programmiert denn aus? Ich kann so etwas im Netz nicht finden.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

thomas223 hat geschrieben:Danke für die Berichtigung, ist in erster Linie erst mal so nur hin gekleckst gewesen.

Wie sieht das mit Configure Programmiert denn aus? Ich kann so etwas im Netz nicht finden.
Zum Beispiel so:

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.label = tk.Label(self,text='label', bg='#ecc381')
        self.label.pack(expand=1, fill='both')
        self.after(100,self.after_init)

    def after_init(self):
        self.label.bind('<Configure>',lambda event,widget=self.label: self.update_textsize(widget),'+')

    def update_textsize(self,widget):
        factor = 2
        textsize = int(widget.winfo_height()/factor)
        widget['font'] = 'TkDefaultFont {}'.format(textsize)

if __name__ == '__main__':
    Application().mainloop()
Man muß zuerst ein wenig warten, bis der pack Manager das Layout gemacht hat, denn zuvor hat so ein Widget nur die Höhe 1
Antworten