如何在tkinter按钮之间添加特定的像素间隔?

时间:2018-09-12 21:51:17

标签: python python-3.x tkinter

我为一些按钮编写了一些代码。但是,我不确定如何为每个按钮添加特定数量的间距像素。到目前为止,我已经编写了代码。但是,我还没有找到一种可靠的方法来以像素大小增加按钮之间的间距。

import tkinter as tk
#from tkinter import PhotoImage

def banana():
    print ("Sundae")

def tomato():
    print ("Ketchup")

def potato():
    print ("Potato chips")

root = tk.Tk()
root.geometry("960x600")

f1 = tk.Frame(root, width=70, height=30)
f1.grid(row=3, column=0, sticky="we")

button_qwer = tk.Button(f1, text="Banana", command=banana)
button_asdf = tk.Button(f1, text="Tomato", command=tomato)
button_zxcv = tk.Button(f1, text="Potato", command=potato)

button_qwer.grid(row=0, column=0)
button_asdf.grid(row=0, column=1)
button_zxcv.grid(row=0, column=2)

root.mainloop()

2 个答案:

答案 0 :(得分:0)

在我看来,在每个Button之间使用特定数量的像素间距听起来并不好,因为它不是很灵活,也不容易移植到具有不同分辨率的设备上。

尽管如此,我还是想出了一种方法,即在每个真实的按钮之间放置一个什么都不做的隐形按钮。这有点涉及,主要是因为它需要在以此方式使用的每个Button上放置一个图像,因此其width选项参数将被解释为像素数而不是字符数(这里是some documentation描述各种Button小部件配置选项。

import tkinter as tk

# Inline XBM format data for a 1x1 pixel image.
BITMAP = """
    #define im_width 1
    #define im_height 1
    static char im_bits[] = {
        0x00
    };
"""

root = tk.Tk()
root.geometry("960x600")
bitmap = tk.BitmapImage(data=BITMAP, maskdata=BITMAP)

f1 = tk.Frame(root, width=70, height=30)
f1.grid(row=3, column=0, sticky=tk.EW)

def banana():
    print ("Sundae")

def tomato():
    print ("Ketchup")

def potato():
    print ("Potato chips")

def layout_buttons(parent, buttons, spacing):
    if buttons:
        first, *rest = buttons
        first.grid(row=0, column=0)  # Position first Button.

        for index, button in enumerate(rest, start=1):
            col = 2*index
            # Dummy widget to separate each button from the one before it.
            separator = tk.Button(parent, relief=tk.FLAT, state=tk.ACTIVE,
                                  image=bitmap, borderwidth=0, highlightthickness=0,
                                  width=spacing)
            separator.grid(row=0, column=col-1)
            button.grid(row=0, column=col)

buttons = (
    tk.Button(f1, text="Banana", command=banana),
    tk.Button(f1, text="Tomato", command=tomato),
    tk.Button(f1, text="Potato", command=potato),
)

layout_buttons(f1, buttons, 30)
root.mainloop()

结果:

screenshot of window with buttons with space between them

下面是一个爆炸图,显示间距正好是30个像素(在我的图像编辑器中计算,并由两个Button的相邻边缘之间的水平黑色细线表示)。

blow-up of previous screenshot

答案 1 :(得分:0)

在小部件之间添加空间取决于您如何将小部件放置在窗口中。由于您使用的是grid,一种简单的解决方案是在按钮之间留空的列,然后为这些列提供一个minsize等于您想要的空间。

示例:

f1.grid_columnconfigure((1, 3), minsize=10, weight=0)

button_qwer.grid(row=0, column=0)
button_asdf.grid(row=0, column=2)
button_zxcv.grid(row=0, column=4)