有没有办法在不知道小部件的字体系列和字体大小的情况下更改Tkinter小部件的字体样式?
使用案例:我们使用标准Tkinter小部件(标签,条目,文本等)创建UI .在我们的应用程序运行时,我们可能希望使用该.config()方法动态地将这些小部件的字体样式更改为粗体和/或斜体.遗憾的是,如果没有指定字体的族和大小,似乎无法指定字体规范.
以下是我们想要做的事情的例子,但这些例子都不起作用:
widget.config(font='bold')
Run Code Online (Sandbox Code Playgroud)
要么
widget.config(font=( None, None, 'bold' ))
Run Code Online (Sandbox Code Playgroud) 我使用的是 4k 显示器 (3840x2160)。
from tkinter import *
root = Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
print (width, height)
mainloop()
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,输出为 1536 x 864
有人可以解释一下为什么会发生这种情况,以及如何解决它,谢谢。
我希望我的应用程序能够检测到它是否在 HiDPI 屏幕上运行,如果是,则自行扩展以供使用。正如在这个问题中所说,我知道我需要设置一个比例因子,这个因子应该是我的 DPI 除以 72;我的麻烦在于获取 DPI。这是我所拥有的:
def get_dpi(window):
MM_TO_IN = 1/25.4
pxw = window.master.winfo_screenwidth()
inw = window.master.winfo_screenmmwidth() * MM_TO_IN
return pxw/inw
root = Tk()
root.tk.call('tk', 'scaling', get_dpi(root)/72)
Run Code Online (Sandbox Code Playgroud)
这不起作用(在我的 4k 笔记本电脑屏幕上测试)。进一步检查,我意识到get_dpi()是返回96.0,那winfo_screenmmwidth()是返回1016!(谢天谢地,我的笔记本电脑没有超过一米宽)。
我假设 TkInter 在这里根据一些内部检测到的 DPI 计算宽度(以毫米为单位),错误地检测为 96,但我不确定它是从哪里得到的;我目前在 Linux 上,并xrdb -query返回 196 的 DPI,因此它没有从 X 服务器获取 DPI。
有谁知道一种跨平台的方式来获取我的屏幕 DPI,或者让 TkInter 能够正确获取它?或者,更重要的是:如何让 TkInter 在 HiDPI 屏幕上运行良好,并且在普通屏幕上也能正常工作?谢谢!
我正在尝试使用 Tk 的“tk 缩放”功能来缩放 GUI,但它似乎只更改小部件的大小,而不更改文本。是否可以在 Tkinter 中使用“tk 缩放”并使其正常工作?这是我的测试脚本:
#!/usr/bin/python
from Tkinter import *
root = Tk()
root.tk.call('tk', 'scaling', '-displayof', '.', 50)
root.geometry('640x480+0+0')
label = Label(root, text='THis is some text')
button = Button(root, text='my button', command=root.quit)
label.pack()
button.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 当我在运行fedora 21的macbook pro上启动带有gui的python应用程序时 - tkinter gui非常小.
有什么方法可以扩展它,所以它有用吗?
我意识到这是一个微不足道的问题,但我仍然感到困惑.
我有一个带有视网膜显示屏的13英寸MacBook Pro.我的系统声称系统报告中的分辨率为2560×1600.我假设tkinter中的Canvas命令测量高度和宽度(以像素为单位),而tk文档似乎也表明了这一点.然而下面的代码,我使用1200作为宽度,700作为tkinter画布的高度,产生一个主要填充我的屏幕的画布.
画布的高度和宽度是多少单位?
from tkinter import *
master = Tk()
x = 1200
y = 700
w = Canvas(master, width=x, height=y)
w.pack()
mainloop()
Run Code Online (Sandbox Code Playgroud)