微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Tkinter 中更改具有定义尺寸的小部件内动态文本的字体

如何解决如何在 Tkinter 中更改具有定义尺寸的小部件内动态文本的字体

我是 Python 3 中 GUI 和 Tkinter 的新手。我的程序打算从用户那里获取一个字符串并将其显示消息 小部件中。然而,由于文本的动态长度,小部件的尺寸不断变化,这导致根窗口的 GUI 结构发生变化(根据输入的文本(字符串)大小)。我使用 grid() 系统来定位小部件。

为了保留结构以便小部件不会改变它们的尺寸(因此,位置),我该如何改变字体大小,以便小部件包含整个文本(字符串),但是,保持定义的尺寸?

例如,我希望我的小部件尺寸为

this

而不是

this

下载图像以查看高度和宽度的明显差异。此更改也使其他小部件改变 GUI 结构(我希望对于任何长度的文本作为输入都相同)

因此,为了补偿增加的文本长度,我希望程序使后者的字体更小,以便小部件的尺寸保持前者的尺寸(尺寸在源代码中固定)。

下面给出了所显示小部件的代码摘录

import random
from tkinter import *
interface=Tk()
..
..

#here <abr> is the dynamic text given as input to the program as a string.
#here <abstract> is the widget (here,a Message widget) under consideration

color_codes=['#90eeed','#d681ff','#faf1ae','#57b1f4','#e5dcd4']
abstract = Message(interface,text=abr,font=('Century',15),aspect=350,bg=random.choice(color_codes),justify=CENTER)
abstract.grid(row=200,column=1)
abstract.update()
..
..

我不想在根窗口中添加滚动功能。任何其他替代建议(保留结构)都会有所帮助。

谢谢。

解决方法

与几何管理器存在一些差异。有些更容易“修复”其他人则不然。总的来说,它们也可以组合在一起。然而,网格方法是动态效果较差的选择。

我从您的代码中得知您正在寻找颜色变化方面的动态内容?你可以“骰子”十六进制。这是一个例子

from tkinter import *                                                                       # IMPORTS //////////////////
import random

root = Tk()                                                                                 # WINDOW ATTRIBUTES ////////
width = root.winfo_screenwidth() / 2.5
height = root.winfo_screenheight() / 3.5
root.geometry("400x400+%d+%d" % (width,height))
root.attributes("-transparent","red")
root.overrideredirect(1)


def circular():                                                                             # LABEL // CANVAS OUTSIDE //
    global GLOBAL_STATE,EXTENT                                                             # FUNC()
    if GLOBAL_STATE == 0:
        main_canvas.itemconfig(outer_arc,extent=EXTENT,start=EXTENT,fill="#"+("%06x"%random.randint(0,16777215)))
        main_label.configure(text="CPU-HEAT\n"+("%d"%random.randint(0,9999999)+"°C"),fg="#"+("%06x"%random.randint(0,16777215)))
        exit_button.configure(fg="#"+("%06x"%random.randint(0,16777215)),activeforeground="#"+("%06x"%random.randint(0,16777215)))
        main_canvas.after(10,circular)
        EXTENT += 3.6

def circular_in():                                                                          # CANVAS INSIDE FUNC() /////
    global GLOBAL_STATE,EXTENT_IN
    if GLOBAL_STATE == 0:
        main_canvas.itemconfig(inner_arc,extent=EXTENT_IN,start=EXTENT_IN,16777215)))
        main_canvas.itemconfig(oval_blink,16777215)))
        main_canvas.after(15,circular_in)
        EXTENT_IN -= 3.6

GLOBAL_STATE = 0                                                                            # STATEMENTS // GLOBAL /////
EXTENT = 0
EXTENT_IN = 0

main_canvas = Canvas(root,bg="red",highlightthickness=0)                                      ##==> CREATE CANVAS
oval_blink = main_canvas.create_oval(10,10,390,390)                                          ##==> OVAL BLINKING
oval_main = main_canvas.create_oval(15,15,385,fill="#050707")                           ##==> OVAL CONTAINER
outer_arc = main_canvas.create_arc(22,22,378,fill="red",start=90)                      ##==> CREATE ARC
oval_inner = main_canvas.create_oval(26,26,374,fill="black")                            ##==> CREAT INNER LINE
oval_main = main_canvas.create_oval(40,40,360,fill="#050707")                           ##==> OVAL CONTAINER
inner_arc = main_canvas.create_arc(60,60,340,start=90)                      ##==> CREATE ARC
oval_lblcon = main_canvas.create_oval(65,65,335,fill="#080a0b")                         ##==> OVAL LBL CONT.

main_canvas.pack(fill=BOTH,expand=YES)

main_label = Label(main_canvas,font=("Consolas",30),bg="#080a0b")
main_label.place(x=105,y=145)

exit_button = Button(main_canvas,bg="#080a0b",text="\u26CC",bd=0,font=("Segoe UI",22),##==> EXIT APP /////////
                     activebackground="#080a0b",command=root.destroy)
exit_button.place(x=175,y=80)


if __name__ == '__main__':                                                                  # RUN APP //////////////////
    circular()
    circular_in()
    root.mainloop()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。