Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can Python';在按钮小部件中同时显示文本和图像?_Python_Button_Tkinter_Toolbar - Fatal编程技术网

Can Python';在按钮小部件中同时显示文本和图像?

Can Python';在按钮小部件中同时显示文本和图像?,python,button,tkinter,toolbar,Python,Button,Tkinter,Toolbar,为了练习,我使用Python的Tkinter复制/重新创建另一个软件GUI的“选项”部分。这是我的模型GUI: 在这一时刻,我的代码如下: 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 = la

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

在这一时刻,我的代码如下:

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]
将tkinter作为tk导入
将tkinter.ttk导入为ttk
随机输入
从PIL导入图像,ImageTk
类选项(tk.Frame):
定义初始化(自身,父级):
random_numbers=lambda:[random.random()表示范围(4)内的i]
text\u font\u icon=r“D:\Dropbox\coding\python\experiments\6-tkinter\icons\icon\u mail.gif”
labelframe_general=tk.labelframe(父级,text=“general”)
labelframe_general.pack()
标签(labelframe_general,text=“Startup tab”,justify=tk.LEFT).grid(列=0,行=0,粘性=tk.W)
ttk.OptionMenu(labelframe_general,tk.StringVar(),random_numbers()[0],*random_numbers()).grid(列=1,行=0)
标签(labelframe_general,text=“插曲显示格式”,justify=tk.LEFT).grid(列=0,行=1,粘性=tk.W)
ttk.OptionMenu(labelframe_general,tk.StringVar(),random_numbers()[0],*random_numbers()).grid(列=1,行=1)
标签(labelframe_general,text=“每个系列要下载的横幅图像数量”,justify=tk.LEFT)。网格(列=0,行=2,粘性=tk.W)
ttk.OptionMenu(labelframe_general,tk.StringVar(),random_numbers()[0],*random_numbers()).grid(列=1,行=2)
tk.Checkbutton(labelframe_-general,text=“自动将剧集列表滚动到底”,变量=tk.StringVar()).grid(列=0,行=3,列span=2,粘性=tk.W)
tk.Checkbutton(labelframe_general,text='Move“The”to 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=“用键关闭epCheck”,variable=tk.StringVar()).grid(column=0,row=5,columnspan=2,sticky=tk.W)
_photo=tk.PhotoImage(文件=text\u font\u图标)
b=ttk.按钮(labelframe\u general,text=“列表和概述字体(默认情况下单击鼠标右键”,图像=\u照片)
b、 图片=\u照片
b、 网格(粘性=tk.NSEW,列跨度=2)
类Gui(tk.tk):
定义初始化(自):
super()。\uuuu init\uuuuu()
选项(自我)
self.bind(“”,lambda事件:self.destroy())
gui=gui()
gui.mainloop()[![在此处输入图像描述][2][2]
上述情况产生了以下结果:

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

该按钮仅显示图标,但不显示文本“列表和概述字体”。我的问题:

  • 为什么在使用图像时,按钮上的文本会消失

  • Tkinter是否可以在按钮中(如上面的模型GUI中)显示图标和文本,或在其旁边显示

  • Tkinter的“工具栏”或小部件是否能够与文本一起显示图标,或者我是否必须选择纯文本按钮和纯图像按钮


  • 我已经试用了菜单按钮并测试了其他来源的代码,但没有效果。如果您能提供帮助,我将不胜感激。

    您需要为的
    component
    选项指定一个值

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

    同时提供图像和文本选项但不指定 复合选项,将显示图像,而不会显示文本。


    谢谢!它起作用了。还有:1)有没有办法从文本中“填充”图像,以便它们之间有一些空间?2)你能在按钮小部件中对齐/对齐图像/文本吗?@anonnoir据我所知,不,你不能这样做。添加填充的唯一选项是添加额外的空格,但由于字体等原因,这可能不可靠。