我刚刚开始使用tkinter小部件,并尝试同时创建带有图像和文本标签的Checkbuttons。不幸的是,这不能用基本的Checkbutton(..., image= , text= )完成,因为设置image会禁止text

这是我尝试做的一个愚蠢但可复制的示例。

from tkinter import Tk, Frame, Checkbutton, Label
from PIL import ImageTk, Image
import requests

def getImgFromUrl(url): # using solution from : https://stackoverflow.com/a/18369957/2573061
   try:
       r = requests.get(url, stream=True)
       pilImage = Image.open(r.raw)
       phoImage = ImageTk.PhotoImage(pilImage)
       return phoImage
   except Exception as e:
       print('Error ' + repr(e) )
       return None


class AnimalPicker(Frame):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.master.title("Animal Picker")


def main():
    root = Tk()
    root.geometry("250x450+300+300")
    app = AnimalPicker()

    imageUrls = ['http://icons.iconarchive.com/icons/martin-berube/flat-animal/64/dachshund-icon.png',
             'http://icons.iconarchive.com/icons/iconka/meow/64/cat-walk-icon.png',
             'http://icons.iconarchive.com/icons/sonya/swarm/64/Unicorn-icon.png']

    labels = ['Dog','Cat','Unicorn']

    images = [getImgFromUrl(x) for x in imageUrls]

    for i in range(len(images)):
        cb = Checkbutton(root, text=labels[i], image = images[i])
        cb.pack(anchor = 'w', padx=5,pady=5)
    root.mainloop()

if __name__ == '__main__':
    main()


给我们:

python - 如何创建带有标签图像的Checkbuttons?-LMLPHP

但我想在图像的下方或侧面放置标签(“猫”,“狗”,“独角兽”)。

同样重要的是,该解决方案适用于任意数量的Checkbutton,如上面的for循环中所示。

我应该使用网格并将这些Checkbutton堆叠在Labels旁边吗?到目前为止,我已经设法避免学习它。还是使用Pack容易?

最佳答案

我想在图像的下方或侧面放置标签(“猫”,“狗”,“独角兽”)。


Bryan's comment中的建议,只需配置compoundCheckbutton选项即可完成此操作。

只需更换:

cb = Checkbutton(root, text=labels[i], image = images[i])


与:

cb = Checkbutton(root, text=labels[i], image = images[i], compound='left')


或将compound option设置为['bottom', 'center', 'left', 'right', 'top']的元素,默认情况下为None

cb['compound'] = 'top'




下面的示例为大多数Windows用户提供了一个简单的示例:

import tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()

mypath = r"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"
img = Image.open(mypath)
glb_img = ImageTk.PhotoImage(img)
tk.Checkbutton(root, text="Koala", image=glb_img, compound='top').pack()

root.mainloop()




另外值得注意的是,导入PIL对于.png格式是多余的,可以只使用tk.PhotoImage(data=image_data)tk.PhotoImage(file=image_file)

关于python - 如何创建带有标签图像的Checkbuttons?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48085771/

10-12 05:14