如何创建带有标签图像的Checkbuttons?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建带有标签图像的Checkbuttons?相关的知识,希望对你有一定的参考价值。
我刚开始使用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()
给我们:
但我想在图像的下方或侧面放置标签(“猫”,“狗”,“独角兽”)。
同样重要的是,该解决方案适用于任意数量的Checkbuttons,如上面的for
循环。
我应该使用网格并在标签旁边堆叠这些支票按钮吗?到目前为止,我已经设法避免学习它。或者Pack很容易吗?
答案
我想在图像的下方或侧面放置标签(“猫”,“狗”,“独角兽”)。
正如Bryan's comment所建议的,这可以通过配置compound
的Checkbutton
选项来完成。
简单地替换:
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:UsersPublicPicturesSample PicturesKoala.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)
。
以上是关于如何创建带有标签图像的Checkbuttons?的主要内容,如果未能解决你的问题,请参考以下文章