按鈕的寬度以字符寬度爲單位進行定義。在你的情況下,按鈕被定義爲17個字符寬。所以通過改變字符寬度(即改變字體大小)來改變按鈕的寬度。 AFAIK,唯一的解決方法是將按鈕放入一個Frame中,因爲Frame可以用像素來定義它的大小。這裏有一個新的按鈕的那正是這麼做的:
import Tkinter as tk
class Warspyking(tk.Frame):
'''A button that has it's width and height set in pixels'''
def __init__(self, master=None, **kwargs):
tk.Frame.__init__(self, master)
self.rowconfigure(0, minsize=kwargs.pop('height', None))
self.columnconfigure(0, minsize=kwargs.pop('width', None))
self.btn = tk.Button(self, **kwargs)
self.btn.grid(row=0, column=0, sticky="nsew")
self.config = self.btn.config
#example usage:
MyWindow = tk.Tk()
MyWindow.geometry("500x550")
from itertools import cycle
fonts = cycle((('Helvetica', '11'),('Helvetica', '15'),('Helvetica', '20')))
def chg():
button.config(font=next(fonts))
button = Warspyking(MyWindow,text="Click me!",width=200,height=100 ,font=next(fonts), command=chg)
button.grid(row=1, column=1)
MyWindow.mainloop()
編輯:基於我從布萊恩·奧克利瞭解到,這裏有一個更整潔的實現:
class Warspyking(tk.Button):
def __init__(self, master=None, **kwargs):
self.img = tk.PhotoImage()
tk.Button.__init__(self, master, image=self.img, compound='center', **kwargs)
我還要補充一點,我很同意布萊恩:使用這可能表明你做錯了什麼。你應該讓tkinter處理大小。
爲什麼你將字號傳遞爲字符串而不是數字? – martineau
@martineau嗯,我通過它的方式其實並不重要,但我想我在網上發現了通過它的文檔。 – warspyking
儘管如此,它並沒有幫助我解決手頭上的真實問題 – warspyking