python-3.x 我如何改变tkinter ttk按钮(只显示文本)的宽度和高度?

dwbf0jvd  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(337)

对于我的应用程序,我设计了一个简单的屏幕键盘(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()
#-------------------------------------------------------------------------
r7xajy2e

r7xajy2e1#

如果给予按钮一个图像,widthheight参数将被视为像素而不是字符数。因此,您可以创建一个1x1透明像素(例如:tk.PhotoImage(width=1, height=1)),并将其与文本沿着添加到按钮中(并将compound设置为合理的值),这样就可以定义按钮的像素大小。
或者,您可以向没有边框的框架添加单个按钮,并使用place选项使其完全填充框架。然后,您可以设置框架宽度和高度(以像素为单位),按钮将填充该框架。

相关问题