对于我的应用程序,我设计了一个简单的屏幕键盘(OSK),它需要在触摸屏上使用,但也可以与鼠标一起使用。最初,happlication只能在1920x1080屏幕上运行,但现在我有许多请求要移植到不同的分辨率上。问题是,OSK是以最简单的方式设计的,以满足1920X1080屏幕,所以我调整了字体,以获得正确的宽度为按钮设置为4,其中4是字符数可能会显示在按钮上。但现在,为了适应每一个分辨率的OSK,我应该计算按钮的宽度。OSK有14列,特殊的按钮,如Shift,Enter,Backspace,选项卡等的宽度为2列(它们在2列上延伸)并且在按钮和OSK的外部界限之间存在10像素的水平填充,所以14列按钮有15个“间隔符”。2我可以用像素计算按钮的宽度,但是我不能用像素设置按钮的宽度......只能用字符数。3我错过了什么吗?4或者有什么解决办法吗?如果可以帮助我可以设置字体为一个共同的非比例之一。我做了一个小测试程序,看看是否有可能设置宽度的像素ttk。按钮,似乎我不能做到这一点:
def testButtonsType():
def select(choice):
choice = choice
if choice=="yes":
print("yes")
else:
print("no")
#---------------------------------------------------------------------------
mainWin = Tk()
mainWin.title("Main Window")
mainWin.geometry('400x250')
pixel = tk.PhotoImage(width=1, height=1)
s = ttk.Style()
s.configure("osk.TButton",foreground="black",
background="white",
height=50,
# padding=[10, 10, 10, 10],
font = "None 14 bold")
btnYes = ttk.Button(mainWin, text='SI', image=pixel, compound='c', width=200, style="osk.TButton", command=lambda: select("yes"))
btnYes.grid(pady=(20,30), sticky='n', column=1, row=0)
btnNo = tk.Button(mainWin, text='NO', image=pixel, compound='c', width=100, height=50, font = ("None 14 bold"), command=lambda: select("no"))
btnNo.grid(padx=(20,20), pady=(20,30), sticky='n', column=0, row=0)
mainWin.mainloop()
#-------------------------------------------------------------------------
1条答案
按热度按时间r7xajy2e1#
如果给予按钮一个图像,
width
和height
参数将被视为像素而不是字符数。因此,您可以创建一个1x1透明像素(例如:tk.PhotoImage(width=1, height=1)
),并将其与文本沿着添加到按钮中(并将compound
设置为合理的值),这样就可以定义按钮的像素大小。或者,您可以向没有边框的框架添加单个按钮,并使用
place
选项使其完全填充框架。然后,您可以设置框架宽度和高度(以像素为单位),按钮将填充该框架。