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:
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?
Ich bin beim Codieren in Python auf ein [url=viewtopic.php?t=26065]Problem[/url] 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]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() [/code]
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]from tkinter import * import tkinter.font as tkFont
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 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)))
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?
Ich habe ungefähr 20 Schaltflächen in meinem HTML -Code und möchte einen JavaScript -Code schreiben, der den Inhalt einer Taste beim Drücken ändert. Jede Taste muss ihren spezifischen Inhalt haben,...
Ich verwende NanoHTTPD in meinem Android-Projekt, um Dateien über einen lokalen HTTP-Server bereitzustellen. Während der Server funktioniert, scheint die Dateigröße auf 226 MB begrenzt zu sein....
Ich verwende NanoHTTPD in meinem Android-Projekt, um Dateien über einen lokalen HTTP-Server bereitzustellen. Während der Server funktioniert, scheint die Dateigröße auf 226 MB begrenzt zu sein....
Ich erstelle Diagramme für eine Forschungsarbeit mit Pythons Matplotlib und möchte, dass alle Diagramme für den „inneren“ Datenbereich (wo das Diagramm oder Bild tatsächlich gezeichnet wird) genau...
Ich erstelle Diagramme für eine Forschungsarbeit mit Pythons Matplotlib und möchte, dass alle Diagramme die genau gleiche Größe für den „inneren“ Datenbereich haben (wo das Diagramm oder Bild...