2017-06-06 128 views
1

練習時,我使用Python的Tkinter來複制/重新創建另一個軟件GUI的「選項」部分。這是我的模型GUI:Python的Tkinter能夠在Button小部件中顯示文本和圖像嗎?

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(所有其他小部件都按照我預期的那樣行事)。

該按鈕僅顯示圖標,但未指定文本「List & Overview font」。我的問題:

  1. 爲什麼使用圖像時文本從按鈕消失?

  2. Can Tkinter可以在按鈕中顯示與圖標一起或在旁邊的圖標(就像上面的模型GUI一樣)?

  3. Tkinter的'工具欄'或小部件能夠顯示與文本一起的圖標,還是我約束選擇純文字按鈕和僅限圖像按鈕?

我已經嘗試過使用Menubutton並測試其他來源的代碼,但無濟於事。將不勝感激的幫助。

回答

2

您需要指定compound選項的值ttk.Button

如果您同時提供圖像和文本選項,則複合選項 指定圖像相對於文本的位置。值 可能是tk.TOP(文本上方的圖像),tk.BOTTOM(文本下面的圖像), tk.LEFT(文本左側的圖像)或tk.RIGHT(圖像到文本右側的 )。

當您同時提供圖像和文本的選擇,但不指定 複合期權,圖像會出現和文本不會。

+0

謝謝!有效。另外:1)有沒有辦法從文本中「填充」圖像,以便它們之間有一定的空間?和2)你可以文本對齊/對齊圖像/文本_內的按鈕部件? – anonnoir

+1

@anonnoir據我所知,不,你不能做任何這些。只有添加填充的選項是添加了額外的空格,但由於字體等原因可能不可靠。 – Lafexlos

相關問題