|
#!/usr/bin/env python3
|
|
# Startdate: 2024-04-08-2 13:44
|
|
# Purpose: demo of the cool features of tkstackrpms
|
|
# Reference:
|
|
# [python - Can I possibly put an image/label into an option box in Tkinter? - Stack Overflow](https://stackoverflow.com/questions/67334913/can-i-possibly-put-an-image-label-into-an-option-box-in-tkinter/67337760#67337760)
|
|
|
|
# demo 1: optionmenu with images and text
|
|
import tkinter as tk
|
|
import tkstackrpms as stk
|
|
|
|
class App(tk.Frame):
|
|
def __init__(self, master):
|
|
super().__init__(master)
|
|
self.master.title("Demo of tkstackrpms features")
|
|
imgicon = stk.get_scaled_icon("battery",24,"default", "","apps")
|
|
self.master.tk.call("wm","iconphoto",self.master._w,imgicon)
|
|
self.grid()
|
|
self.options = ["Blue","Green","Yellow","Purple","Red"]
|
|
# prepare set of images that corresponse to the options
|
|
self.img_colors = []
|
|
for i in self.options:
|
|
t_image = tk.PhotoImage(width=16)
|
|
t_image.put(i,to=(0,0,15,15))
|
|
self.img_colors.append(t_image)
|
|
self.opt_choice = tk.StringVar()
|
|
self.opt_menu = tk.OptionMenu(self.master,self.opt_choice,*self.options)
|
|
# indicatoron=False turns off the weird second-button item within the button.
|
|
# minimize the padding so the box is not huge
|
|
# takefocus allows navigation to this widget with Tab
|
|
# compound means when an image is present, put it to the left of the text.
|
|
self.opt_menu.config(indicatoron=False,padx=1,pady=1,takefocus=1,compound="left")
|
|
self.opt_choice.set(self.options[0])
|
|
self.opt_menu.grid(row=0,column=1)
|
|
ow = self.opt_menu.nametowidget(self.opt_menu.menuname)
|
|
x = 0
|
|
for i in self.options:
|
|
ow.entryconfigure(i,image=self.img_colors[x],compound="left")
|
|
x += 1
|
|
self.opt_choice.trace("w",self.set_selected_optmenu_entry)
|
|
self.set_selected_optmenu_entry()
|
|
|
|
def set_selected_optmenu_entry(self, arg1 = None, arg2 = None, arg3 = None):
|
|
this_color = None
|
|
x = 0
|
|
for i in self.options:
|
|
if self.opt_choice.get() == i:
|
|
self.opt_menu.config(image=self.img_colors[x])
|
|
break
|
|
x += 1
|
|
|
|
# main
|
|
root = tk.Tk()
|
|
app_tk = App(root)
|
|
app_tk.mainloop()
|