【发布时间】:2018-05-02 12:51:18
【问题描述】:
我正在尝试创建一个程序,允许用户更改窗口中标签的字体。我很难弄清楚如何用新字体重新创建所有标签。这是我目前所拥有的:
import tkinter as tk
from tkinter import messagebox, colorchooser, simpledialog, filedialog, font
root = tk.Tk()
root.withdraw()
screenHieght = root.winfo_screenheight() # height of the screen
screenWidth = root.winfo_screenwidth() # width of the screen
windowHieght = screenHieght / 2 # Turtle window is half of screen size
windowWidth = screenWidth / 2
x = (screenWidth / 2) - (windowWidth / 2)
y = (screenHieght / 2) - (windowHieght / 2)
root.geometry('%dx%d+%d+%d' % (windowWidth, windowHieght, x, y)) # Some assistance from Google on centering the window
root.columnconfigure(3, weight=2)
root.columnconfigure(1, weight=1)
root.columnconfigure(5, weight=1)
root.rowconfigure(1, weight=2)
root.rowconfigure(3, weight=1)
root.rowconfigure(4, weight=1)
root.rowconfigure(5, weight=1)
root.configure(background="#a1dbcd")
def changeFont(selection):
global selectedfont
global setfontstyle
print(selection)
selectedfont = selection
print(setfontstyle)
def changeSize(val):
print(val)
global setfontstyle
global fontsize
fontsize = val
print(setfontstyle)
def newfontstyle():
global setfontstyle
global selectedfont
global fontsize
setfontstyle = font.Font(family = selectedfont, size = fontsize)
fontsize = tk.IntVar(root)
selectedfont = tk.StringVar(root)
setfontstyle = font.Font(family=selectedfont, size=12, weight='normal')
def atributes():
while True:
global setfontstyle
global selectedfont
global fontsize
fontchoose = ["Arial", "Courier New", "Comic Sans MS", "Fixedsys", "MS Sans Serif", "MS Serif", "Symbol",
"System",
"Times New Roman", "Verdana"]
selectedfont.set("Arial")
# Variables and stuff
label1 = tk.Label(root, text="Select your options", font=setfontstyle).grid(row=1, column=3, pady=10,
sticky=tk.E + tk.W + tk.N + tk.S)
label2 = tk.Label(root, text="Font Style", font=setfontstyle).grid(row=3, column=5, pady=10,
sticky=tk.E + tk.W + tk.N + tk.S)
fontdropdown = tk.OptionMenu(root, selectedfont, *fontchoose, command=changeFont).grid(row=4, column=5, pady=10,
sticky=tk.E + tk.W + tk.N + tk.S)
label3 = tk.Label(root, text="Font Size", font=setfontstyle).grid(row=3, column=1, pady=10,
sticky=tk.E + tk.W + tk.N + tk.S)
fontsize = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL, command=changeSize).grid(row=4, column=1,
pady=10,
sticky=tk.E + tk.W + tk.N + tk.S)
redoall = tk.Button(root, text="Recreate", font=setfontstyle, command=newfontstyle).grid(
row=5, column=3, pady=10, sticky=tk.E + tk.W + tk.N + tk.S)
# print(fontdropdown)
root.deiconify()
# root.wait_variable(selectedfont or fontsize)
root.mainloop()
感谢您的帮助。这几天我一直在努力寻找答案。
【问题讨论】:
-
您不需要重新创建标签。您可以更改现有标签的字体。见stackoverflow.com/a/4073037/7432
-
但是我如何一次获得所有标签。有没有办法可以使用 for 循环之类的?
-
如果你阅读了我发布的链接,你根本不需要对标签做任何事情。给他们所有相同的字体对象,然后你只需要更改一个字体对象。
-
对不起,我有点困惑。我很确定我使用
setfontstyle作为我的字体对象。但是,当我修改它时,什么都没有改变 -
与问题无关,你为什么要在循环中调用
mainloop,或者这只是你发布代码的错误?另外,请发布实际运行的代码。当我运行您的代码时,它什么也不做(可能是因为没有调用atributes.
标签: python python-3.x tkinter tk