【问题标题】:How to set the width of a Button in tkinter?如何在 tkinter 中设置按钮的宽度?
【发布时间】:2011-05-20 19:58:21
【问题描述】:

我正在尝试使用 Tkinter 在 Python 中制作一个简单的 GUI 计算器。然而,按钮的宽度通常会偏离 1 或 2 个像素。有没有办法强制所有按钮具有相同的宽度。

我知道 ipadx 方法;但是,它会在按钮的两侧添加像素。当按钮的宽度为奇数时,这会导致问题。

那么,施加统一宽度的最佳方法是什么?

这是我的代码:

self.SC.Ca.Btn7 = Tkinter.Button(self.SC.Ca.BtnFrame, text="7", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn7.grid(column=0, row=0, padx=px, pady=py)

self.SC.Ca.Btn8 = Tkinter.Button(self.SC.Ca.BtnFrame, text="8", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn8.grid(column=1, row=0, padx=px, pady=py)

self.SC.Ca.Btn9 = Tkinter.Button(self.SC.Ca.BtnFrame, text="9", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn9.grid(column=2, row=0, padx=px, pady=py)

self.SC.Ca.Btn4 = Tkinter.Button(self.SC.Ca.BtnFrame, text="4", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn4.grid(column=0, row=1, padx=px, pady=py)

self.SC.Ca.Btn5 = Tkinter.Button(self.SC.Ca.BtnFrame, text="5", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn5.grid(column=1, row=1, padx=px, pady=py)

self.SC.Ca.Btn6 = Tkinter.Button(self.SC.Ca.BtnFrame, text="6", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn6.grid(column=2, row=1, padx=px, pady=py)

self.SC.Ca.Btn1 = Tkinter.Button(self.SC.Ca.BtnFrame, text="1", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn1.grid(column=0, row=2, padx=px, pady=py)

self.SC.Ca.Btn2 = Tkinter.Button(self.SC.Ca.BtnFrame, text="2", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn2.grid(column=1, row=2, padx=px, pady=py)

self.SC.Ca.Btn3 = Tkinter.Button(self.SC.Ca.BtnFrame, text="3", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn3.grid(column=2, row=2, padx=px, pady=py)

self.SC.Ca.Btn0 = Tkinter.Button(self.SC.Ca.BtnFrame, text="0", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.Btn0.grid(column=0, row=3, columnspan=2, ipadx=13, padx=px, pady=py)

self.SC.Ca.BtnPe = Tkinter.Button(self.SC.Ca.BtnFrame, text=".", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnPe.grid(column=2, row=3, ipadx=2, padx=px, pady=py)



self.SC.Ca.OppBtnFrame = Tkinter.Frame(self.SC.Ca.MainFrame, bd=self.SCbw, bg=self.SCbg)
self.SC.Ca.OppBtnFrame.grid(column=1, row=2)


self.SC.Ca.BtnPN = Tkinter.Button(self.SC.Ca.OppBtnFrame, text="±", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnPN.grid(column=0, row=0, ipadx=4, padx=px, pady=py)

self.SC.Ca.BtnSl = Tkinter.Button(self.SC.Ca.OppBtnFrame, text="/", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnSl.grid(column=0, row=1, ipadx=3, padx=px, pady=py)

self.SC.Ca.BtnSu = Tkinter.Button(self.SC.Ca.OppBtnFrame, text="-", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnSu.grid(column=0, row=2, ipadx=2, padx=px, pady=py)

self.SC.Ca.BtnSR = Tkinter.Button(self.SC.Ca.OppBtnFrame, text="√", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnSR.grid(column=1, row=0, ipadx=1, padx=px, pady=py)



self.SC.Ca.BtnCl = Tkinter.Button(self.SC.Ca.OppBtnFrame, text="C", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnCl.grid(column=0, row=3, ipadx=0, padx=px, pady=py)

self.SC.Ca.BtnSt = Tkinter.Button(self.SC.Ca.OppBtnFrame, text="*", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnSt.grid(column=1, row=1, ipadx=1, padx=px, pady=py)

self.SC.Ca.BtnAd = Tkinter.Button(self.SC.Ca.OppBtnFrame, text="+", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnAd.grid(column=1, row=2, ipadx=1, padx=px, pady=py)

self.SC.Ca.BtnEq = Tkinter.Button(self.SC.Ca.OppBtnFrame, text="=", bd=self.SCbw, fg=self.SCfg,
                                 bg=self.SCbg, activeforeground=self.SCfg, activebackground=self.SCbg, font=self.SCfob)
self.SC.Ca.BtnEq.grid(column=1, row=3, ipadx=1, padx=px, pady=py)

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    使用grid 几何管理器的sticky 选项将按钮“粘贴”到其包含单元格的所有四个侧面(即Tkinter.N + Tkinter.S + Tkinter.E + Tkinter.W)。如果您想强制设置最小宽度,则可以设置按钮宽度或更好地使用grid_columnconfigure

    另外,真的考虑不要在构建 UI 时过多地使用复制/粘贴 - 如果您有多个具有相同选项的按钮,至少将它们放在字典中,使用函数或 functools.partial。 Tkinter 让编写干净的 UI 代码变得非常容易,稍后你会感谢自己...

    【讨论】:

    • 您可以使用nsew,而不是非常冗长的Tkinter.N + Tkinter.S + Tkinter.E + Tkinter.W)。使用这样的 Tkinter 常量真的没有意义。这不像底层的 tk 常量永远不会改变。 Tk 使用相同的值已有几十年或更长时间。
    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2015-06-24
    • 2020-11-05
    相关资源
    最近更新 更多