Wie lässt sich die Größe von Python-Tkinter-Texten in Schaltflächen und Beschriftungen automatisch ändern?Python

Python-Programme
Anonymous
 Wie lässt sich die Größe von Python-Tkinter-Texten in Schaltflächen und Beschriftungen automatisch ändern?

Post by Anonymous »

Ich bin beim Codieren in Python auf ein Problem gestoßen, für das ich keine Lösung finden kann. Ich habe ein Tkinter-Raster, dessen Größe sich automatisch an die Größe des Fensters anpasst, in dem es sich befindet, aber ich möchte, dass sich auch die Größe des Textes in den Schaltflächen/Beschriftungen an das neue Raster anpasst. Ein einfaches Beispiel hierfür finden Sie unten:

Code: Select all

from tkinter import *

root = Tk()

for x in range(3):
for y in range(3):
Label(root, width = 2, height = 4, text = (y * 3 + x) + 1, relief = GROOVE).grid(row = y, column = x, sticky = N+E+S+W)
Grid.rowconfigure(root, y, weight = 1)
Grid.columnconfigure(root, x, weight = 1)

root.mainloop()
Ich möchte, dass der Text größer wird, wenn Sie das Fenster ziehen, um es zu erweitern. Wie kann das gemacht werden?



BEARBEITEN:

Mike – SMTs Lösung funktioniert gut, jedoch nicht mit der Situation, die ich im Kommentar zu seiner Antwort beschrieben habe.

Hier ist der Code, den ich habe:

Code: Select all

from tkinter import *
import tkinter.font as tkFont

grey = [0,1,2,6,7,8,9,10,11,15,16,17,18,19,20,24,25,26,30,31,32,39,40,41,48,49,50,54,55,56,60,61,62,63,64,65,69,70,71,72,73,74,78,79,80]
btn_list = []

filled = []
filled_ID = []

class GUI(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)

self.screen_init()

self.key = None
self.keydetection = False
self.detect()
self.bind_all("", self.key_event)

def screen_init(self, master = None):
for x in range(9):
for y in range(9):
btn_list.append(Button(master, width = 40, height = 40, image = pixel, compound = CENTER, bg = "#D3D3D3" if 9 * y + x in grey else "#FFFFFF", command = lambda c = 9 * y + x: self.click(c)))
btn_list[-1].grid(row = y, column = x, sticky = N+E+S+W)
Grid.rowconfigure(root, y, weight = 1)
Grid.columnconfigure(root, x, weight = 1)

def update(self, btn_ID, number = None, colour = "#000000", master = None):
y = btn_ID // 9
x = btn_ID % 9
Button(master, width = 40, height = 40, image = pixel, text = number, compound = CENTER, fg = colour, bg = "#D3D3D3" if 9 * y + x in grey else "#FFFFFF", command = lambda c = 9 * y + x: self.click(c)).grid(row = y, column = x, sticky = N+E+S+W)

def detect(self):
self.keydetection = not self.keydetection

def key_event(self, event):
try:
self.key = int(event.keysym)
except:
print("Numbers Only!")

def click(self, btn_ID):
if btn_ID in filled:
filled_ID.pop(filled.index(btn_ID))
filled.remove(btn_ID)
window.update(btn_ID)
else:
filled.append(btn_ID)
filled_ID.append(self.key)
window.update(btn_ID, self.key)

def font_resize(event=None):
for btn in btn_list:
x = btn.winfo_width()
y = btn.winfo_height()
if x < y:
btn.config(font=("Courier", (x-10)))
else:
btn.config(font=("Courier", (y-10)))

if __name__ == '__main__':
root = Tk()
root.title("Example")
pixel = PhotoImage(width = 1, height = 1)
font = tkFont.Font(family = "Helvetica")
window = GUI(root)
root.bind("", font_resize)
root.mainloop()
Das bedeutet, dass sich der Text nicht im Raster befindet, wenn der Code ursprünglich ausgeführt wird, da der Benutzer eine Zifferntaste drückt, um eine Zahl auszuwählen, und dann auf die Stelle klickt, an der diese Zahl im Raster erscheinen soll, und dies scheint die Lösung von Mike - SMT zu zerstören. Irgendwelche Korrekturen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post