azure.example
Example script for testing the Azure ttk theme.
1# SPDX-FileCopyrightText: © 2021 rdbende <rdbende@proton.me> 2# SPDX-License-Identifier: MIT 3 4""" 5Example script for testing the Azure ttk theme. 6""" 7 8from __future__ import annotations 9 10import tkinter as tk 11from tkinter import ttk 12 13# These lint errors don't make sense for GUI widgets, so are disabled here. 14# pragma pylint: disable=too-many-instance-attributes, too-many-ancestors 15 16 17class App(ttk.Frame): 18 """ 19 The example application window. 20 """ 21 22 def __init__(self, parent: tk.Misc | None) -> None: 23 ttk.Frame.__init__(self, parent) 24 25 # Make the app responsive 26 for index in [0, 1, 2]: 27 self.columnconfigure(index=index, weight=1) 28 self.rowconfigure(index=index, weight=1) 29 30 # Create value lists 31 self.option_menu_list = ["", "OptionMenu", "Option 1", "Option 2"] 32 self.combo_list = ["Combobox", "Editable item 1", "Editable item 2"] 33 self.readonly_combo_list = ["Readonly combobox", "Item 1", "Item 2"] 34 35 # Create control variables 36 self.var_0 = tk.BooleanVar() 37 self.var_1 = tk.BooleanVar(value=True) 38 self.var_2 = tk.BooleanVar() 39 self.var_3 = tk.IntVar(value=2) 40 self.var_4 = tk.StringVar(value=self.option_menu_list[1]) 41 self.var_5 = tk.DoubleVar(value=75.0) 42 43 # Create widgets :) 44 self.setup_widgets() 45 46 def setup_widgets(self) -> None: # noqa: PLR0915 # pylint: disable=R0915 47 """ 48 Set up the widgets. 49 """ 50 # Create a Frame for the Checkbuttons 51 self.check_frame = ttk.LabelFrame(self, text="Checkbuttons", padding=(20, 10)) 52 self.check_frame.grid( 53 row=0, column=0, padx=(20, 10), pady=(20, 10), sticky="nsew" 54 ) 55 56 # Checkbuttons 57 self.check_1 = ttk.Checkbutton( 58 self.check_frame, text="Unchecked", variable=self.var_0 59 ) 60 self.check_1.grid(row=0, column=0, padx=5, pady=10, sticky="nsew") 61 62 self.check_2 = ttk.Checkbutton( 63 self.check_frame, text="Checked", variable=self.var_1 64 ) 65 self.check_2.grid(row=1, column=0, padx=5, pady=10, sticky="nsew") 66 67 self.check_3 = ttk.Checkbutton( 68 self.check_frame, text="Third state", variable=self.var_2 69 ) 70 self.check_3.state(["alternate"]) 71 self.check_3.grid(row=2, column=0, padx=5, pady=10, sticky="nsew") 72 73 self.check_4 = ttk.Checkbutton( 74 self.check_frame, text="Disabled", state="disabled" 75 ) 76 self.check_4.state(["disabled !alternate"]) 77 self.check_4.grid(row=3, column=0, padx=5, pady=10, sticky="nsew") 78 79 # Separator 80 self.separator = ttk.Separator(self) 81 self.separator.grid(row=1, column=0, padx=(20, 10), pady=10, sticky="ew") 82 83 # Create a Frame for the Radiobuttons 84 self.radio_frame = ttk.LabelFrame(self, text="Radiobuttons", padding=(20, 10)) 85 self.radio_frame.grid(row=2, column=0, padx=(20, 10), pady=10, sticky="nsew") 86 87 # Radiobuttons 88 self.radio_1 = ttk.Radiobutton( 89 self.radio_frame, text="Unselected", variable=self.var_3, value=1 90 ) 91 self.radio_1.grid(row=0, column=0, padx=5, pady=10, sticky="nsew") 92 self.radio_2 = ttk.Radiobutton( 93 self.radio_frame, text="Selected", variable=self.var_3, value=2 94 ) 95 self.radio_2.grid(row=1, column=0, padx=5, pady=10, sticky="nsew") 96 self.radio_4 = ttk.Radiobutton( 97 self.radio_frame, text="Disabled", state="disabled" 98 ) 99 self.radio_4.grid(row=3, column=0, padx=5, pady=10, sticky="nsew") 100 101 # Create a Frame for input widgets 102 self.widgets_frame = ttk.Frame(self, padding=(0, 0, 0, 10)) 103 self.widgets_frame.grid( 104 row=0, column=1, padx=10, pady=(30, 10), sticky="nsew", rowspan=3 105 ) 106 self.widgets_frame.columnconfigure(index=0, weight=1) 107 108 # Entry 109 self.entry = ttk.Entry(self.widgets_frame) 110 self.entry.insert(0, "Entry") 111 self.entry.grid(row=0, column=0, padx=5, pady=(0, 10), sticky="ew") 112 113 # Spinbox 114 self.spinbox = ttk.Spinbox(self.widgets_frame, from_=0, to=100, increment=0.1) 115 self.spinbox.insert(0, "Spinbox") 116 self.spinbox.grid(row=1, column=0, padx=5, pady=10, sticky="ew") 117 118 # Combobox 119 self.combobox = ttk.Combobox(self.widgets_frame, values=self.combo_list) 120 self.combobox.current(0) 121 self.combobox.grid(row=2, column=0, padx=5, pady=10, sticky="ew") 122 123 # Read-only combobox 124 self.readonly_combo = ttk.Combobox( 125 self.widgets_frame, state="readonly", values=self.readonly_combo_list 126 ) 127 self.readonly_combo.current(0) 128 self.readonly_combo.grid(row=3, column=0, padx=5, pady=10, sticky="ew") 129 130 # Menu for the Menubutton 131 self.menu = tk.Menu(self) 132 self.menu.add_command(label="Menu item 1") 133 self.menu.add_command(label="Menu item 2") 134 self.menu.add_separator() 135 self.menu.add_command(label="Menu item 3") 136 self.menu.add_command(label="Menu item 4") 137 138 # Menubutton 139 self.menubutton = ttk.Menubutton( 140 self.widgets_frame, text="Menubutton", menu=self.menu, direction="below" 141 ) 142 self.menubutton.grid(row=4, column=0, padx=5, pady=10, sticky="nsew") 143 144 # OptionMenu 145 self.optionmenu = ttk.OptionMenu( 146 self.widgets_frame, self.var_4, *self.option_menu_list 147 ) 148 self.optionmenu.grid(row=5, column=0, padx=5, pady=10, sticky="nsew") 149 150 # Button 151 self.button = ttk.Button(self.widgets_frame, text="Button") 152 self.button.grid(row=6, column=0, padx=5, pady=10, sticky="nsew") 153 154 # Accentbutton 155 self.accentbutton = ttk.Button( 156 self.widgets_frame, text="Accent button", style="Accent.TButton" 157 ) 158 self.accentbutton.grid(row=7, column=0, padx=5, pady=10, sticky="nsew") 159 160 # Togglebutton 161 self.togglebutton = ttk.Checkbutton( 162 self.widgets_frame, text="Toggle button", style="Toggle.TButton" 163 ) 164 self.togglebutton.grid(row=8, column=0, padx=5, pady=10, sticky="nsew") 165 166 # Switch 167 self.switch = ttk.Checkbutton( 168 self.widgets_frame, text="Switch", style="Switch.TCheckbutton" 169 ) 170 self.switch.grid(row=9, column=0, padx=5, pady=10, sticky="nsew") 171 172 # Panedwindow 173 self.paned = ttk.PanedWindow(self) 174 self.paned.grid(row=0, column=2, pady=(25, 5), sticky="nsew", rowspan=3) 175 176 # Pane #1 177 self.pane_1 = ttk.Frame(self.paned, padding=5) 178 self.paned.add(self.pane_1, weight=1) 179 180 # Scrollbar 181 self.scrollbar = ttk.Scrollbar(self.pane_1) 182 self.scrollbar.pack(side="right", fill="y") 183 184 # Treeview 185 self.treeview = ttk.Treeview( 186 self.pane_1, 187 selectmode="browse", 188 yscrollcommand=self.scrollbar.set, 189 columns=(1, 2), 190 height=10, 191 ) 192 self.treeview.pack(expand=True, fill="both") 193 self.scrollbar.config(command=self.treeview.yview) 194 195 # Treeview columns 196 self.treeview.column("#0", anchor="w", width=120) 197 self.treeview.column(1, anchor="w", width=120) 198 self.treeview.column(2, anchor="w", width=120) 199 200 # Treeview headings 201 self.treeview.heading("#0", text="Column 1", anchor="center") 202 self.treeview.heading(1, text="Column 2", anchor="center") 203 self.treeview.heading(2, text="Column 3", anchor="center") 204 205 # Define treeview data 206 treeview_data = [ 207 ("", 1, "Parent", ("Item 1", "Value 1")), 208 (1, 2, "Child", ("Subitem 1.1", "Value 1.1")), 209 (1, 3, "Child", ("Subitem 1.2", "Value 1.2")), 210 (1, 4, "Child", ("Subitem 1.3", "Value 1.3")), 211 (1, 5, "Child", ("Subitem 1.4", "Value 1.4")), 212 ("", 6, "Parent", ("Item 2", "Value 2")), 213 (6, 7, "Child", ("Subitem 2.1", "Value 2.1")), 214 (6, 8, "Sub-parent", ("Subitem 2.2", "Value 2.2")), 215 (8, 9, "Child", ("Subitem 2.2.1", "Value 2.2.1")), 216 (8, 10, "Child", ("Subitem 2.2.2", "Value 2.2.2")), 217 (8, 11, "Child", ("Subitem 2.2.3", "Value 2.2.3")), 218 (6, 12, "Child", ("Subitem 2.3", "Value 2.3")), 219 (6, 13, "Child", ("Subitem 2.4", "Value 2.4")), 220 ("", 14, "Parent", ("Item 3", "Value 3")), 221 (14, 15, "Child", ("Subitem 3.1", "Value 3.1")), 222 (14, 16, "Child", ("Subitem 3.2", "Value 3.2")), 223 (14, 17, "Child", ("Subitem 3.3", "Value 3.3")), 224 (14, 18, "Child", ("Subitem 3.4", "Value 3.4")), 225 ("", 19, "Parent", ("Item 4", "Value 4")), 226 (19, 20, "Child", ("Subitem 4.1", "Value 4.1")), 227 (19, 21, "Sub-parent", ("Subitem 4.2", "Value 4.2")), 228 (21, 22, "Child", ("Subitem 4.2.1", "Value 4.2.1")), 229 (21, 23, "Child", ("Subitem 4.2.2", "Value 4.2.2")), 230 (21, 24, "Child", ("Subitem 4.2.3", "Value 4.2.3")), 231 (19, 25, "Child", ("Subitem 4.3", "Value 4.3")), 232 ] 233 234 # Insert treeview data 235 for item in treeview_data: 236 self.treeview.insert( 237 parent=str(item[0]), index="end", iid=item[1], text=item[2], values=item[3] 238 ) 239 if item[0] == "" or item[1] in {8, 21}: 240 self.treeview.item(item[1], open=True) # Open parents 241 242 # Select and scroll 243 self.treeview.selection_set(10) 244 self.treeview.see(7) 245 246 # Notebook, pane #2 247 self.pane_2 = ttk.Frame(self.paned, padding=5) 248 self.paned.add(self.pane_2, weight=3) 249 250 # Notebook, pane #2 251 self.notebook = ttk.Notebook(self.pane_2) 252 self.notebook.pack(fill="both", expand=True) 253 254 # Tab #1 255 self.tab_1 = ttk.Frame(self.notebook) 256 for index in [0, 1]: 257 self.tab_1.columnconfigure(index=index, weight=1) 258 self.tab_1.rowconfigure(index=index, weight=1) 259 self.notebook.add(self.tab_1, text="Tab 1") 260 261 # Scale 262 self.scale = ttk.Scale( 263 self.tab_1, 264 from_=100, 265 to=0, 266 variable=self.var_5, 267 command=lambda _event: self.var_5.set(self.scale.get()), 268 ) 269 self.scale.grid(row=0, column=0, padx=(20, 10), pady=(20, 0), sticky="ew") 270 271 # Progressbar 272 self.progress = ttk.Progressbar( 273 self.tab_1, value=0, variable=self.var_5, mode="determinate" 274 ) 275 self.progress.grid(row=0, column=1, padx=(10, 20), pady=(20, 0), sticky="ew") 276 277 # Label 278 self.label = ttk.Label( 279 self.tab_1, 280 text="Azure theme for ttk", 281 justify="center", 282 font=["-size", 15, "-weight", "bold"], 283 ) 284 self.label.grid(row=1, column=0, pady=10, columnspan=2) 285 286 # Tab #2 287 self.tab_2 = ttk.Frame(self.notebook) 288 self.notebook.add(self.tab_2, text="Tab 2") 289 290 # Tab #3 291 self.tab_3 = ttk.Frame(self.notebook) 292 self.notebook.add(self.tab_3, text="Tab 3") 293 294 # Sizegrip 295 self.sizegrip = ttk.Sizegrip(self) 296 self.sizegrip.grid(row=100, column=100, padx=(0, 5), pady=(0, 5)) 297 298 299if __name__ == "__main__": 300 root = tk.Tk() 301 root.title("") 302 303 # Simply set the theme 304 root.tk.call("source", "azure.tcl") 305 root.tk.call("set_theme", "dark") 306 307 app = App(root) 308 app.pack(fill="both", expand=True) 309 310 # Set a minsize for the window, and place it in the middle 311 root.update() 312 root.minsize(root.winfo_width(), root.winfo_height()) 313 x_cordinate = int((root.winfo_screenwidth() / 2) - (root.winfo_width() / 2)) 314 y_cordinate = int((root.winfo_screenheight() / 2) - (root.winfo_height() / 2)) 315 root.geometry(f"+{x_cordinate}+{y_cordinate-20}") 316 317 root.mainloop()
class App(tkinter.ttk.Frame):
18class App(ttk.Frame): 19 """ 20 The example application window. 21 """ 22 23 def __init__(self, parent: tk.Misc | None) -> None: 24 ttk.Frame.__init__(self, parent) 25 26 # Make the app responsive 27 for index in [0, 1, 2]: 28 self.columnconfigure(index=index, weight=1) 29 self.rowconfigure(index=index, weight=1) 30 31 # Create value lists 32 self.option_menu_list = ["", "OptionMenu", "Option 1", "Option 2"] 33 self.combo_list = ["Combobox", "Editable item 1", "Editable item 2"] 34 self.readonly_combo_list = ["Readonly combobox", "Item 1", "Item 2"] 35 36 # Create control variables 37 self.var_0 = tk.BooleanVar() 38 self.var_1 = tk.BooleanVar(value=True) 39 self.var_2 = tk.BooleanVar() 40 self.var_3 = tk.IntVar(value=2) 41 self.var_4 = tk.StringVar(value=self.option_menu_list[1]) 42 self.var_5 = tk.DoubleVar(value=75.0) 43 44 # Create widgets :) 45 self.setup_widgets() 46 47 def setup_widgets(self) -> None: # noqa: PLR0915 # pylint: disable=R0915 48 """ 49 Set up the widgets. 50 """ 51 # Create a Frame for the Checkbuttons 52 self.check_frame = ttk.LabelFrame(self, text="Checkbuttons", padding=(20, 10)) 53 self.check_frame.grid( 54 row=0, column=0, padx=(20, 10), pady=(20, 10), sticky="nsew" 55 ) 56 57 # Checkbuttons 58 self.check_1 = ttk.Checkbutton( 59 self.check_frame, text="Unchecked", variable=self.var_0 60 ) 61 self.check_1.grid(row=0, column=0, padx=5, pady=10, sticky="nsew") 62 63 self.check_2 = ttk.Checkbutton( 64 self.check_frame, text="Checked", variable=self.var_1 65 ) 66 self.check_2.grid(row=1, column=0, padx=5, pady=10, sticky="nsew") 67 68 self.check_3 = ttk.Checkbutton( 69 self.check_frame, text="Third state", variable=self.var_2 70 ) 71 self.check_3.state(["alternate"]) 72 self.check_3.grid(row=2, column=0, padx=5, pady=10, sticky="nsew") 73 74 self.check_4 = ttk.Checkbutton( 75 self.check_frame, text="Disabled", state="disabled" 76 ) 77 self.check_4.state(["disabled !alternate"]) 78 self.check_4.grid(row=3, column=0, padx=5, pady=10, sticky="nsew") 79 80 # Separator 81 self.separator = ttk.Separator(self) 82 self.separator.grid(row=1, column=0, padx=(20, 10), pady=10, sticky="ew") 83 84 # Create a Frame for the Radiobuttons 85 self.radio_frame = ttk.LabelFrame(self, text="Radiobuttons", padding=(20, 10)) 86 self.radio_frame.grid(row=2, column=0, padx=(20, 10), pady=10, sticky="nsew") 87 88 # Radiobuttons 89 self.radio_1 = ttk.Radiobutton( 90 self.radio_frame, text="Unselected", variable=self.var_3, value=1 91 ) 92 self.radio_1.grid(row=0, column=0, padx=5, pady=10, sticky="nsew") 93 self.radio_2 = ttk.Radiobutton( 94 self.radio_frame, text="Selected", variable=self.var_3, value=2 95 ) 96 self.radio_2.grid(row=1, column=0, padx=5, pady=10, sticky="nsew") 97 self.radio_4 = ttk.Radiobutton( 98 self.radio_frame, text="Disabled", state="disabled" 99 ) 100 self.radio_4.grid(row=3, column=0, padx=5, pady=10, sticky="nsew") 101 102 # Create a Frame for input widgets 103 self.widgets_frame = ttk.Frame(self, padding=(0, 0, 0, 10)) 104 self.widgets_frame.grid( 105 row=0, column=1, padx=10, pady=(30, 10), sticky="nsew", rowspan=3 106 ) 107 self.widgets_frame.columnconfigure(index=0, weight=1) 108 109 # Entry 110 self.entry = ttk.Entry(self.widgets_frame) 111 self.entry.insert(0, "Entry") 112 self.entry.grid(row=0, column=0, padx=5, pady=(0, 10), sticky="ew") 113 114 # Spinbox 115 self.spinbox = ttk.Spinbox(self.widgets_frame, from_=0, to=100, increment=0.1) 116 self.spinbox.insert(0, "Spinbox") 117 self.spinbox.grid(row=1, column=0, padx=5, pady=10, sticky="ew") 118 119 # Combobox 120 self.combobox = ttk.Combobox(self.widgets_frame, values=self.combo_list) 121 self.combobox.current(0) 122 self.combobox.grid(row=2, column=0, padx=5, pady=10, sticky="ew") 123 124 # Read-only combobox 125 self.readonly_combo = ttk.Combobox( 126 self.widgets_frame, state="readonly", values=self.readonly_combo_list 127 ) 128 self.readonly_combo.current(0) 129 self.readonly_combo.grid(row=3, column=0, padx=5, pady=10, sticky="ew") 130 131 # Menu for the Menubutton 132 self.menu = tk.Menu(self) 133 self.menu.add_command(label="Menu item 1") 134 self.menu.add_command(label="Menu item 2") 135 self.menu.add_separator() 136 self.menu.add_command(label="Menu item 3") 137 self.menu.add_command(label="Menu item 4") 138 139 # Menubutton 140 self.menubutton = ttk.Menubutton( 141 self.widgets_frame, text="Menubutton", menu=self.menu, direction="below" 142 ) 143 self.menubutton.grid(row=4, column=0, padx=5, pady=10, sticky="nsew") 144 145 # OptionMenu 146 self.optionmenu = ttk.OptionMenu( 147 self.widgets_frame, self.var_4, *self.option_menu_list 148 ) 149 self.optionmenu.grid(row=5, column=0, padx=5, pady=10, sticky="nsew") 150 151 # Button 152 self.button = ttk.Button(self.widgets_frame, text="Button") 153 self.button.grid(row=6, column=0, padx=5, pady=10, sticky="nsew") 154 155 # Accentbutton 156 self.accentbutton = ttk.Button( 157 self.widgets_frame, text="Accent button", style="Accent.TButton" 158 ) 159 self.accentbutton.grid(row=7, column=0, padx=5, pady=10, sticky="nsew") 160 161 # Togglebutton 162 self.togglebutton = ttk.Checkbutton( 163 self.widgets_frame, text="Toggle button", style="Toggle.TButton" 164 ) 165 self.togglebutton.grid(row=8, column=0, padx=5, pady=10, sticky="nsew") 166 167 # Switch 168 self.switch = ttk.Checkbutton( 169 self.widgets_frame, text="Switch", style="Switch.TCheckbutton" 170 ) 171 self.switch.grid(row=9, column=0, padx=5, pady=10, sticky="nsew") 172 173 # Panedwindow 174 self.paned = ttk.PanedWindow(self) 175 self.paned.grid(row=0, column=2, pady=(25, 5), sticky="nsew", rowspan=3) 176 177 # Pane #1 178 self.pane_1 = ttk.Frame(self.paned, padding=5) 179 self.paned.add(self.pane_1, weight=1) 180 181 # Scrollbar 182 self.scrollbar = ttk.Scrollbar(self.pane_1) 183 self.scrollbar.pack(side="right", fill="y") 184 185 # Treeview 186 self.treeview = ttk.Treeview( 187 self.pane_1, 188 selectmode="browse", 189 yscrollcommand=self.scrollbar.set, 190 columns=(1, 2), 191 height=10, 192 ) 193 self.treeview.pack(expand=True, fill="both") 194 self.scrollbar.config(command=self.treeview.yview) 195 196 # Treeview columns 197 self.treeview.column("#0", anchor="w", width=120) 198 self.treeview.column(1, anchor="w", width=120) 199 self.treeview.column(2, anchor="w", width=120) 200 201 # Treeview headings 202 self.treeview.heading("#0", text="Column 1", anchor="center") 203 self.treeview.heading(1, text="Column 2", anchor="center") 204 self.treeview.heading(2, text="Column 3", anchor="center") 205 206 # Define treeview data 207 treeview_data = [ 208 ("", 1, "Parent", ("Item 1", "Value 1")), 209 (1, 2, "Child", ("Subitem 1.1", "Value 1.1")), 210 (1, 3, "Child", ("Subitem 1.2", "Value 1.2")), 211 (1, 4, "Child", ("Subitem 1.3", "Value 1.3")), 212 (1, 5, "Child", ("Subitem 1.4", "Value 1.4")), 213 ("", 6, "Parent", ("Item 2", "Value 2")), 214 (6, 7, "Child", ("Subitem 2.1", "Value 2.1")), 215 (6, 8, "Sub-parent", ("Subitem 2.2", "Value 2.2")), 216 (8, 9, "Child", ("Subitem 2.2.1", "Value 2.2.1")), 217 (8, 10, "Child", ("Subitem 2.2.2", "Value 2.2.2")), 218 (8, 11, "Child", ("Subitem 2.2.3", "Value 2.2.3")), 219 (6, 12, "Child", ("Subitem 2.3", "Value 2.3")), 220 (6, 13, "Child", ("Subitem 2.4", "Value 2.4")), 221 ("", 14, "Parent", ("Item 3", "Value 3")), 222 (14, 15, "Child", ("Subitem 3.1", "Value 3.1")), 223 (14, 16, "Child", ("Subitem 3.2", "Value 3.2")), 224 (14, 17, "Child", ("Subitem 3.3", "Value 3.3")), 225 (14, 18, "Child", ("Subitem 3.4", "Value 3.4")), 226 ("", 19, "Parent", ("Item 4", "Value 4")), 227 (19, 20, "Child", ("Subitem 4.1", "Value 4.1")), 228 (19, 21, "Sub-parent", ("Subitem 4.2", "Value 4.2")), 229 (21, 22, "Child", ("Subitem 4.2.1", "Value 4.2.1")), 230 (21, 23, "Child", ("Subitem 4.2.2", "Value 4.2.2")), 231 (21, 24, "Child", ("Subitem 4.2.3", "Value 4.2.3")), 232 (19, 25, "Child", ("Subitem 4.3", "Value 4.3")), 233 ] 234 235 # Insert treeview data 236 for item in treeview_data: 237 self.treeview.insert( 238 parent=str(item[0]), index="end", iid=item[1], text=item[2], values=item[3] 239 ) 240 if item[0] == "" or item[1] in {8, 21}: 241 self.treeview.item(item[1], open=True) # Open parents 242 243 # Select and scroll 244 self.treeview.selection_set(10) 245 self.treeview.see(7) 246 247 # Notebook, pane #2 248 self.pane_2 = ttk.Frame(self.paned, padding=5) 249 self.paned.add(self.pane_2, weight=3) 250 251 # Notebook, pane #2 252 self.notebook = ttk.Notebook(self.pane_2) 253 self.notebook.pack(fill="both", expand=True) 254 255 # Tab #1 256 self.tab_1 = ttk.Frame(self.notebook) 257 for index in [0, 1]: 258 self.tab_1.columnconfigure(index=index, weight=1) 259 self.tab_1.rowconfigure(index=index, weight=1) 260 self.notebook.add(self.tab_1, text="Tab 1") 261 262 # Scale 263 self.scale = ttk.Scale( 264 self.tab_1, 265 from_=100, 266 to=0, 267 variable=self.var_5, 268 command=lambda _event: self.var_5.set(self.scale.get()), 269 ) 270 self.scale.grid(row=0, column=0, padx=(20, 10), pady=(20, 0), sticky="ew") 271 272 # Progressbar 273 self.progress = ttk.Progressbar( 274 self.tab_1, value=0, variable=self.var_5, mode="determinate" 275 ) 276 self.progress.grid(row=0, column=1, padx=(10, 20), pady=(20, 0), sticky="ew") 277 278 # Label 279 self.label = ttk.Label( 280 self.tab_1, 281 text="Azure theme for ttk", 282 justify="center", 283 font=["-size", 15, "-weight", "bold"], 284 ) 285 self.label.grid(row=1, column=0, pady=10, columnspan=2) 286 287 # Tab #2 288 self.tab_2 = ttk.Frame(self.notebook) 289 self.notebook.add(self.tab_2, text="Tab 2") 290 291 # Tab #3 292 self.tab_3 = ttk.Frame(self.notebook) 293 self.notebook.add(self.tab_3, text="Tab 3") 294 295 # Sizegrip 296 self.sizegrip = ttk.Sizegrip(self) 297 self.sizegrip.grid(row=100, column=100, padx=(0, 5), pady=(0, 5))
The example application window.
App(parent: tkinter.Misc | None)
23 def __init__(self, parent: tk.Misc | None) -> None: 24 ttk.Frame.__init__(self, parent) 25 26 # Make the app responsive 27 for index in [0, 1, 2]: 28 self.columnconfigure(index=index, weight=1) 29 self.rowconfigure(index=index, weight=1) 30 31 # Create value lists 32 self.option_menu_list = ["", "OptionMenu", "Option 1", "Option 2"] 33 self.combo_list = ["Combobox", "Editable item 1", "Editable item 2"] 34 self.readonly_combo_list = ["Readonly combobox", "Item 1", "Item 2"] 35 36 # Create control variables 37 self.var_0 = tk.BooleanVar() 38 self.var_1 = tk.BooleanVar(value=True) 39 self.var_2 = tk.BooleanVar() 40 self.var_3 = tk.IntVar(value=2) 41 self.var_4 = tk.StringVar(value=self.option_menu_list[1]) 42 self.var_5 = tk.DoubleVar(value=75.0) 43 44 # Create widgets :) 45 self.setup_widgets()
Construct a Ttk Frame with parent master.
STANDARD OPTIONS
class, cursor, style, takefocus
WIDGET-SPECIFIC OPTIONS
borderwidth, relief, padding, width, height
def
setup_widgets(self) -> None:
47 def setup_widgets(self) -> None: # noqa: PLR0915 # pylint: disable=R0915 48 """ 49 Set up the widgets. 50 """ 51 # Create a Frame for the Checkbuttons 52 self.check_frame = ttk.LabelFrame(self, text="Checkbuttons", padding=(20, 10)) 53 self.check_frame.grid( 54 row=0, column=0, padx=(20, 10), pady=(20, 10), sticky="nsew" 55 ) 56 57 # Checkbuttons 58 self.check_1 = ttk.Checkbutton( 59 self.check_frame, text="Unchecked", variable=self.var_0 60 ) 61 self.check_1.grid(row=0, column=0, padx=5, pady=10, sticky="nsew") 62 63 self.check_2 = ttk.Checkbutton( 64 self.check_frame, text="Checked", variable=self.var_1 65 ) 66 self.check_2.grid(row=1, column=0, padx=5, pady=10, sticky="nsew") 67 68 self.check_3 = ttk.Checkbutton( 69 self.check_frame, text="Third state", variable=self.var_2 70 ) 71 self.check_3.state(["alternate"]) 72 self.check_3.grid(row=2, column=0, padx=5, pady=10, sticky="nsew") 73 74 self.check_4 = ttk.Checkbutton( 75 self.check_frame, text="Disabled", state="disabled" 76 ) 77 self.check_4.state(["disabled !alternate"]) 78 self.check_4.grid(row=3, column=0, padx=5, pady=10, sticky="nsew") 79 80 # Separator 81 self.separator = ttk.Separator(self) 82 self.separator.grid(row=1, column=0, padx=(20, 10), pady=10, sticky="ew") 83 84 # Create a Frame for the Radiobuttons 85 self.radio_frame = ttk.LabelFrame(self, text="Radiobuttons", padding=(20, 10)) 86 self.radio_frame.grid(row=2, column=0, padx=(20, 10), pady=10, sticky="nsew") 87 88 # Radiobuttons 89 self.radio_1 = ttk.Radiobutton( 90 self.radio_frame, text="Unselected", variable=self.var_3, value=1 91 ) 92 self.radio_1.grid(row=0, column=0, padx=5, pady=10, sticky="nsew") 93 self.radio_2 = ttk.Radiobutton( 94 self.radio_frame, text="Selected", variable=self.var_3, value=2 95 ) 96 self.radio_2.grid(row=1, column=0, padx=5, pady=10, sticky="nsew") 97 self.radio_4 = ttk.Radiobutton( 98 self.radio_frame, text="Disabled", state="disabled" 99 ) 100 self.radio_4.grid(row=3, column=0, padx=5, pady=10, sticky="nsew") 101 102 # Create a Frame for input widgets 103 self.widgets_frame = ttk.Frame(self, padding=(0, 0, 0, 10)) 104 self.widgets_frame.grid( 105 row=0, column=1, padx=10, pady=(30, 10), sticky="nsew", rowspan=3 106 ) 107 self.widgets_frame.columnconfigure(index=0, weight=1) 108 109 # Entry 110 self.entry = ttk.Entry(self.widgets_frame) 111 self.entry.insert(0, "Entry") 112 self.entry.grid(row=0, column=0, padx=5, pady=(0, 10), sticky="ew") 113 114 # Spinbox 115 self.spinbox = ttk.Spinbox(self.widgets_frame, from_=0, to=100, increment=0.1) 116 self.spinbox.insert(0, "Spinbox") 117 self.spinbox.grid(row=1, column=0, padx=5, pady=10, sticky="ew") 118 119 # Combobox 120 self.combobox = ttk.Combobox(self.widgets_frame, values=self.combo_list) 121 self.combobox.current(0) 122 self.combobox.grid(row=2, column=0, padx=5, pady=10, sticky="ew") 123 124 # Read-only combobox 125 self.readonly_combo = ttk.Combobox( 126 self.widgets_frame, state="readonly", values=self.readonly_combo_list 127 ) 128 self.readonly_combo.current(0) 129 self.readonly_combo.grid(row=3, column=0, padx=5, pady=10, sticky="ew") 130 131 # Menu for the Menubutton 132 self.menu = tk.Menu(self) 133 self.menu.add_command(label="Menu item 1") 134 self.menu.add_command(label="Menu item 2") 135 self.menu.add_separator() 136 self.menu.add_command(label="Menu item 3") 137 self.menu.add_command(label="Menu item 4") 138 139 # Menubutton 140 self.menubutton = ttk.Menubutton( 141 self.widgets_frame, text="Menubutton", menu=self.menu, direction="below" 142 ) 143 self.menubutton.grid(row=4, column=0, padx=5, pady=10, sticky="nsew") 144 145 # OptionMenu 146 self.optionmenu = ttk.OptionMenu( 147 self.widgets_frame, self.var_4, *self.option_menu_list 148 ) 149 self.optionmenu.grid(row=5, column=0, padx=5, pady=10, sticky="nsew") 150 151 # Button 152 self.button = ttk.Button(self.widgets_frame, text="Button") 153 self.button.grid(row=6, column=0, padx=5, pady=10, sticky="nsew") 154 155 # Accentbutton 156 self.accentbutton = ttk.Button( 157 self.widgets_frame, text="Accent button", style="Accent.TButton" 158 ) 159 self.accentbutton.grid(row=7, column=0, padx=5, pady=10, sticky="nsew") 160 161 # Togglebutton 162 self.togglebutton = ttk.Checkbutton( 163 self.widgets_frame, text="Toggle button", style="Toggle.TButton" 164 ) 165 self.togglebutton.grid(row=8, column=0, padx=5, pady=10, sticky="nsew") 166 167 # Switch 168 self.switch = ttk.Checkbutton( 169 self.widgets_frame, text="Switch", style="Switch.TCheckbutton" 170 ) 171 self.switch.grid(row=9, column=0, padx=5, pady=10, sticky="nsew") 172 173 # Panedwindow 174 self.paned = ttk.PanedWindow(self) 175 self.paned.grid(row=0, column=2, pady=(25, 5), sticky="nsew", rowspan=3) 176 177 # Pane #1 178 self.pane_1 = ttk.Frame(self.paned, padding=5) 179 self.paned.add(self.pane_1, weight=1) 180 181 # Scrollbar 182 self.scrollbar = ttk.Scrollbar(self.pane_1) 183 self.scrollbar.pack(side="right", fill="y") 184 185 # Treeview 186 self.treeview = ttk.Treeview( 187 self.pane_1, 188 selectmode="browse", 189 yscrollcommand=self.scrollbar.set, 190 columns=(1, 2), 191 height=10, 192 ) 193 self.treeview.pack(expand=True, fill="both") 194 self.scrollbar.config(command=self.treeview.yview) 195 196 # Treeview columns 197 self.treeview.column("#0", anchor="w", width=120) 198 self.treeview.column(1, anchor="w", width=120) 199 self.treeview.column(2, anchor="w", width=120) 200 201 # Treeview headings 202 self.treeview.heading("#0", text="Column 1", anchor="center") 203 self.treeview.heading(1, text="Column 2", anchor="center") 204 self.treeview.heading(2, text="Column 3", anchor="center") 205 206 # Define treeview data 207 treeview_data = [ 208 ("", 1, "Parent", ("Item 1", "Value 1")), 209 (1, 2, "Child", ("Subitem 1.1", "Value 1.1")), 210 (1, 3, "Child", ("Subitem 1.2", "Value 1.2")), 211 (1, 4, "Child", ("Subitem 1.3", "Value 1.3")), 212 (1, 5, "Child", ("Subitem 1.4", "Value 1.4")), 213 ("", 6, "Parent", ("Item 2", "Value 2")), 214 (6, 7, "Child", ("Subitem 2.1", "Value 2.1")), 215 (6, 8, "Sub-parent", ("Subitem 2.2", "Value 2.2")), 216 (8, 9, "Child", ("Subitem 2.2.1", "Value 2.2.1")), 217 (8, 10, "Child", ("Subitem 2.2.2", "Value 2.2.2")), 218 (8, 11, "Child", ("Subitem 2.2.3", "Value 2.2.3")), 219 (6, 12, "Child", ("Subitem 2.3", "Value 2.3")), 220 (6, 13, "Child", ("Subitem 2.4", "Value 2.4")), 221 ("", 14, "Parent", ("Item 3", "Value 3")), 222 (14, 15, "Child", ("Subitem 3.1", "Value 3.1")), 223 (14, 16, "Child", ("Subitem 3.2", "Value 3.2")), 224 (14, 17, "Child", ("Subitem 3.3", "Value 3.3")), 225 (14, 18, "Child", ("Subitem 3.4", "Value 3.4")), 226 ("", 19, "Parent", ("Item 4", "Value 4")), 227 (19, 20, "Child", ("Subitem 4.1", "Value 4.1")), 228 (19, 21, "Sub-parent", ("Subitem 4.2", "Value 4.2")), 229 (21, 22, "Child", ("Subitem 4.2.1", "Value 4.2.1")), 230 (21, 23, "Child", ("Subitem 4.2.2", "Value 4.2.2")), 231 (21, 24, "Child", ("Subitem 4.2.3", "Value 4.2.3")), 232 (19, 25, "Child", ("Subitem 4.3", "Value 4.3")), 233 ] 234 235 # Insert treeview data 236 for item in treeview_data: 237 self.treeview.insert( 238 parent=str(item[0]), index="end", iid=item[1], text=item[2], values=item[3] 239 ) 240 if item[0] == "" or item[1] in {8, 21}: 241 self.treeview.item(item[1], open=True) # Open parents 242 243 # Select and scroll 244 self.treeview.selection_set(10) 245 self.treeview.see(7) 246 247 # Notebook, pane #2 248 self.pane_2 = ttk.Frame(self.paned, padding=5) 249 self.paned.add(self.pane_2, weight=3) 250 251 # Notebook, pane #2 252 self.notebook = ttk.Notebook(self.pane_2) 253 self.notebook.pack(fill="both", expand=True) 254 255 # Tab #1 256 self.tab_1 = ttk.Frame(self.notebook) 257 for index in [0, 1]: 258 self.tab_1.columnconfigure(index=index, weight=1) 259 self.tab_1.rowconfigure(index=index, weight=1) 260 self.notebook.add(self.tab_1, text="Tab 1") 261 262 # Scale 263 self.scale = ttk.Scale( 264 self.tab_1, 265 from_=100, 266 to=0, 267 variable=self.var_5, 268 command=lambda _event: self.var_5.set(self.scale.get()), 269 ) 270 self.scale.grid(row=0, column=0, padx=(20, 10), pady=(20, 0), sticky="ew") 271 272 # Progressbar 273 self.progress = ttk.Progressbar( 274 self.tab_1, value=0, variable=self.var_5, mode="determinate" 275 ) 276 self.progress.grid(row=0, column=1, padx=(10, 20), pady=(20, 0), sticky="ew") 277 278 # Label 279 self.label = ttk.Label( 280 self.tab_1, 281 text="Azure theme for ttk", 282 justify="center", 283 font=["-size", 15, "-weight", "bold"], 284 ) 285 self.label.grid(row=1, column=0, pady=10, columnspan=2) 286 287 # Tab #2 288 self.tab_2 = ttk.Frame(self.notebook) 289 self.notebook.add(self.tab_2, text="Tab 2") 290 291 # Tab #3 292 self.tab_3 = ttk.Frame(self.notebook) 293 self.notebook.add(self.tab_3, text="Tab 3") 294 295 # Sizegrip 296 self.sizegrip = ttk.Sizegrip(self) 297 self.sizegrip.grid(row=100, column=100, padx=(0, 5), pady=(0, 5))
Set up the widgets.
Inherited Members
- tkinter.ttk.Widget
- identify
- instate
- state
- tkinter.BaseWidget
- destroy
- tkinter.Misc
- deletecommand
- tk_strictMotif
- tk_bisque
- tk_setPalette
- wait_variable
- waitvar
- wait_window
- wait_visibility
- setvar
- getvar
- getboolean
- focus_set
- focus
- focus_force
- focus_get
- focus_displayof
- focus_lastfor
- tk_focusFollowsMouse
- tk_focusNext
- tk_focusPrev
- after
- after_idle
- after_cancel
- bell
- clipboard_get
- clipboard_clear
- clipboard_append
- grab_current
- grab_release
- grab_set
- grab_set_global
- grab_status
- option_add
- option_clear
- option_get
- option_readfile
- selection_clear
- selection_get
- selection_handle
- selection_own
- selection_own_get
- send
- lower
- tkraise
- lift
- winfo_atom
- winfo_atomname
- winfo_cells
- winfo_children
- winfo_class
- winfo_colormapfull
- winfo_containing
- winfo_depth
- winfo_exists
- winfo_fpixels
- winfo_geometry
- winfo_height
- winfo_id
- winfo_interps
- winfo_ismapped
- winfo_manager
- winfo_name
- winfo_parent
- winfo_pathname
- winfo_pixels
- winfo_pointerx
- winfo_pointerxy
- winfo_pointery
- winfo_reqheight
- winfo_reqwidth
- winfo_rgb
- winfo_rootx
- winfo_rooty
- winfo_screen
- winfo_screencells
- winfo_screendepth
- winfo_screenheight
- winfo_screenmmheight
- winfo_screenmmwidth
- winfo_screenvisual
- winfo_screenwidth
- winfo_server
- winfo_toplevel
- winfo_viewable
- winfo_visual
- winfo_visualid
- winfo_visualsavailable
- winfo_vrootheight
- winfo_vrootwidth
- winfo_vrootx
- winfo_vrooty
- winfo_width
- winfo_x
- winfo_y
- update
- update_idletasks
- bind
- unbind
- bind_all
- unbind_all
- bind_class
- unbind_class
- mainloop
- quit
- nametowidget
- register
- configure
- config
- cget
- keys
- pack_propagate
- propagate
- pack_slaves
- slaves
- place_slaves
- grid_anchor
- anchor
- grid_bbox
- bbox
- grid_columnconfigure
- columnconfigure
- grid_location
- grid_propagate
- grid_rowconfigure
- rowconfigure
- grid_size
- size
- grid_slaves
- event_add
- event_delete
- event_generate
- event_info
- image_names
- image_types
- tkinter.Pack
- pack_configure
- pack_forget
- forget
- pack_info
- info
- pack
- tkinter.Place
- place_configure
- place_forget
- place_info
- place
- tkinter.Grid
- grid_configure
- grid_forget
- grid_remove
- grid_info
- grid
- location