Python的Tkinter可以在Button小部件中显示文本和图像吗?

时间:2017-06-06 13:29:03

标签: python button tkinter toolbar

对于练习,我使用Python的Tkinter来复制/重新创建"选项"另一个软件的GUI部分。这是我的模型GUI:

enter image description here

此时,我的编码如下:

import tkinter as tk
import tkinter.ttk as ttk
import random
from PIL import Image, ImageTk

class Options(tk.Frame):

    def __init__(self, parent):

        random_numbers = lambda: [random.random() for i in range(4)]
        text_font_icon = r"D:\Dropbox\coding\python\experiments\6 - tkinter\icons\icon_mail.gif"

        labelframe_general     = tk.LabelFrame(parent, text="General")
        labelframe_general.pack()

        tk.Label(labelframe_general, text="Startup tab", justify=tk.LEFT).grid(column=0, row=0, sticky=tk.W)
        ttk.OptionMenu(labelframe_general, tk.StringVar(), random_numbers()[0], *random_numbers()).grid(column=1, row=0)

        tk.Label(labelframe_general, text="Episode display format", justify=tk.LEFT).grid(column=0, row=1, sticky=tk.W)
        ttk.OptionMenu(labelframe_general, tk.StringVar(), random_numbers()[0], *random_numbers()).grid(column=1, row=1)

        tk.Label(labelframe_general, text="Number of banner images to\ndownload per series", justify=tk.LEFT).grid(column=0, row=2, sticky=tk.W)
        ttk.OptionMenu(labelframe_general, tk.StringVar(), random_numbers()[0], *random_numbers()).grid(column=1, row=2)

        tk.Checkbutton(labelframe_general, text="Automatically scroll episode list to bottom", variable=tk.StringVar()).grid(column=0, row=3, columnspan=2, sticky=tk.W)
        tk.Checkbutton(labelframe_general, text='Move "The" to the end of series name', variable=tk.StringVar()).grid(column=0, row=4, columnspan=2, sticky=tk.W)
        tk.Checkbutton(labelframe_general, text="Close epCheck with the <Esc> key", variable=tk.StringVar()).grid(column=0, row=5, columnspan=2, sticky=tk.W)

        _photo = tk.PhotoImage(file=text_font_icon)
        b = ttk.Button(labelframe_general, text="List & Overview font (right-click for default", image=_photo)
        b.image = _photo
        b.grid(sticky=tk.NSEW, columnspan=2)


class Gui(tk.Tk):

    def __init__(self):

        super().__init__()
        Options(self)

        self.bind('<Escape>', lambda event: self.destroy())

gui = Gui()
gui.mainloop()[![enter image description here][2]][2]

以上产生了这个:

enter image description here

我的问题仅在于ttk.Button(所有其他小部件的行为与我期望的一样)。

按钮仅显示图标,但不显示文本&#34;列表&amp;概述字体&#34;。我的问题:

  1. 为什么在使用图像时文本会从按钮中消失?

  2. Tkinter可以与按钮中的文本一起显示图标,也可以显示在旁边(如上面的模型GUI中所示)?

  3. Tkinter&#39;工具栏&#39;或者小部件能够与文本一起显示图标,还是我只能选择纯文本按钮和仅图像按钮?

  4. 我已尝试使用Menubutton并测试其他来源的代码,但无济于事。很感激帮助。

1 个答案:

答案 0 :(得分:2)

您需要为ttk.Buttoncompound选项指定一个值。

  

如果同时提供图像和文本选项,则复合选项   指定图像相对于文本的位置。价值   可能是tk.TOP(图片上方文字),tk.BOTTOM(图片下方文字),   tk.LEFT(文本左侧的图像),或tk.RIGHT(图像到   正确的文字)。

     

当您同时提供图片和文字选项但未指定时   复合选项,图片将显示,文字不会。