Can Python';在按钮小部件中同时显示文本和图像?
为了练习,我使用Python的Tkinter复制/重新创建另一个软件GUI的“选项”部分。这是我的模型GUI: 在这一时刻,我的代码如下: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
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(所有其他小部件的行为与我预期的一样)
该按钮仅显示图标,但不显示文本“列表和概述字体”。我的问题:
我已经试用了菜单按钮并测试了其他来源的代码,但没有效果。如果您能提供帮助,我将不胜感激。您需要为的
component
选项指定一个值
如果同时提供图像和文本选项,则复合选项
指定图像相对于文本的位置。值
可以是tk.TOP(文本上方的图像),tk.BOTTOM(文本下方的图像),
tk.LEFT(文本左侧的图像)或tk.RIGHT(文本左侧的图像)
文本右侧)
同时提供图像和文本选项但不指定
复合选项,将显示图像,而不会显示文本。
谢谢!它起作用了。还有:1)有没有办法从文本中“填充”图像,以便它们之间有一些空间?2)你能在按钮小部件中对齐/对齐图像/文本吗?@anonnoir据我所知,不,你不能这样做。添加填充的唯一选项是添加额外的空格,但由于字体等原因,这可能不可靠。