trace_add() for menu labels works
This commit is contained in:
parent
9a4d8b3506
commit
42870e2942
@ -1,45 +0,0 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import tkinter as tk
|
||||
|
||||
class MainWindow(tk.Tk):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.title("Trace-Test-Window")
|
||||
self.geometry("400x300")
|
||||
self.text_label = tk.StringVar()
|
||||
self.text_forground = tk.StringVar(value="red")
|
||||
self.text_label.set("This is the main window")
|
||||
self.label = tk.Label(self, textvariable=self.text_label)
|
||||
self.label.grid(row=0, column=0, padx=10, pady=10)
|
||||
self.label.grid_remove()
|
||||
|
||||
self.button_text = tk.StringVar()
|
||||
self.button_text.set("Drück für andere Text anzeige")
|
||||
self.button = tk.Button(self, textvariable=self.button_text, command=self.toggle_lable)
|
||||
self.button.grid(row=1, column=0, padx=10, pady=10)
|
||||
|
||||
self.text_label.trace_add("write", self.update_label)
|
||||
self.text_forground.trace_add("write", self.update_label)
|
||||
|
||||
def update_label(self, *args):
|
||||
self.label.configure(foreground=self.text_forground.get())
|
||||
|
||||
if self.text_label.get():
|
||||
self.label.grid()
|
||||
else:
|
||||
self.label.grid_remove()
|
||||
|
||||
def toggle_lable(self):
|
||||
|
||||
if 'main window' in self.text_label.get():
|
||||
self.text_label.set("gewechseltes label")
|
||||
self.button_text.set("Drück für main window")
|
||||
else:
|
||||
self.text_label.set("This is the main window")
|
||||
self.button_text.set("Drück für andere Text anzeige")
|
||||
|
||||
if __name__ == "__main__":
|
||||
window = MainWindow()
|
||||
window.mainloop()
|
111
wirepy.py
111
wirepy.py
@ -107,6 +107,7 @@ class FrameWidgets(ttk.Frame):
|
||||
self.update_tooltip = tk.StringVar() # StringVar-Variable for update tooltip please not remove!
|
||||
self.update_foreground = tk.StringVar(value="red")
|
||||
|
||||
|
||||
# Frame for Menu
|
||||
self.menu_frame = ttk.Frame(self)
|
||||
self.menu_frame.configure(relief="flat")
|
||||
@ -130,7 +131,11 @@ class FrameWidgets(ttk.Frame):
|
||||
self.settings.add_checkbutton(label=_("Disable Updates"),
|
||||
command=lambda: self.update_setting(self.set_update.get()), variable=self.set_update)
|
||||
|
||||
self.updates_lb = ttk.Label(self.menu_frame)
|
||||
self.updates_lb = ttk.Label(self.menu_frame, textvariable=self.update_label)
|
||||
self.updates_lb.grid(column=4, columnspan=3, row=0, padx=10)
|
||||
self.updates_lb.grid_remove()
|
||||
self.update_label.trace_add("write", self.update_label_display)
|
||||
self.update_foreground.trace_add("write", self.update_label_display)
|
||||
res = GiteaUpdate.api_down(AppConfig.UPDATE_URL, AppConfig.VERSION, ConfigManager.get("updates"))
|
||||
self.update_ui_for_update(res)
|
||||
|
||||
@ -295,86 +300,67 @@ class FrameWidgets(ttk.Frame):
|
||||
|
||||
self.on_off()
|
||||
|
||||
# Method that is called when the variable changes
|
||||
def update_label_display(self, *args):
|
||||
# Set the foreground color
|
||||
self.updates_lb.configure(foreground=self.update_foreground.get())
|
||||
|
||||
# Show or hide the label based on whether it contains text
|
||||
if self.update_label.get():
|
||||
# Make sure the label is in the correct position every time it's shown
|
||||
self.updates_lb.grid(column=4, columnspan=3, row=0, padx=10)
|
||||
else:
|
||||
self.updates_lb.grid_remove()
|
||||
|
||||
# Update the labels based on the result
|
||||
def update_ui_for_update(self, res):
|
||||
"""Update UI elements based on update check result"""
|
||||
# First, remove the update button if it exists to avoid conflicts
|
||||
if hasattr(self, 'update_btn'):
|
||||
self.update_btn.grid_forget()
|
||||
delattr(self, 'update_btn')
|
||||
|
||||
if res == "False":
|
||||
self.set_update.set(value=1)
|
||||
self.update_label.set(_("Update search off"))
|
||||
self.update_tooltip.set(_("Updates you have disabled"))
|
||||
self.update_foreground.set("red")
|
||||
|
||||
# Remove update button if it exists
|
||||
if hasattr(self, 'update_btn'):
|
||||
self.update_btn.grid_forget()
|
||||
|
||||
# Display the label
|
||||
self.updates_lb.configure(
|
||||
textvariable=self.update_label,
|
||||
foreground=self.update_foreground.get()
|
||||
)
|
||||
self.updates_lb.grid(column=4, columnspan=3, row=0, padx=10)
|
||||
Tooltip(self.updates_lb, self.update_tooltip.get(), self.tooltip_state)
|
||||
# Clear the foreground color as requested
|
||||
self.update_foreground.set("")
|
||||
|
||||
elif res == "No Internet Connection!":
|
||||
self.update_label.set(_("No Server Connection!"))
|
||||
self.update_foreground.set("red")
|
||||
|
||||
# Remove update button if it exists
|
||||
if hasattr(self, 'update_btn'):
|
||||
self.update_btn.grid_forget()
|
||||
|
||||
# Display the label
|
||||
self.updates_lb.configure(
|
||||
textvariable=self.update_label,
|
||||
foreground=self.update_foreground.get()
|
||||
)
|
||||
self.updates_lb.grid(column=4, columnspan=3, row=0, padx=10)
|
||||
|
||||
elif res == "No Updates":
|
||||
self.update_label.set(_("No Updates"))
|
||||
self.update_tooltip.set(_("Congratulations! Wire-Py is up to date"))
|
||||
self.update_foreground.set("black")
|
||||
|
||||
# Remove update button if it exists
|
||||
if hasattr(self, 'update_btn'):
|
||||
self.update_btn.grid_forget()
|
||||
|
||||
# Display the label
|
||||
self.updates_lb.configure(
|
||||
textvariable=self.update_label,
|
||||
foreground=self.update_foreground.get()
|
||||
)
|
||||
self.updates_lb.grid(column=4, columnspan=3, row=0, padx=10)
|
||||
Tooltip(self.updates_lb, self.update_tooltip.get(), self.tooltip_state)
|
||||
self.update_foreground.set("")
|
||||
|
||||
else:
|
||||
self.set_update.set(value=0)
|
||||
update_text = f"Update {res} {_('available!')}"
|
||||
|
||||
# Clear the label text since we'll show the button instead
|
||||
self.update_label.set("")
|
||||
|
||||
# Remove the label if displayed
|
||||
self.updates_lb.grid_forget()
|
||||
# Create the update button
|
||||
self.update_btn = ttk.Menubutton(self.menu_frame, text=update_text)
|
||||
self.update_btn.grid(column=4, columnspan=3, row=0, padx=0)
|
||||
Tooltip(self.update_btn, _("Click to download new version"), self.tooltip_state)
|
||||
|
||||
# Create or update the update button
|
||||
if not hasattr(self, 'update_btn'):
|
||||
# Create the update button if it doesn't exist yet
|
||||
self.update_btn = ttk.Menubutton(self.menu_frame, text=update_text)
|
||||
self.update_btn.grid(column=4, columnspan=3, row=0, padx=0)
|
||||
Tooltip(self.update_btn, _("Click to download new version"), self.tooltip_state)
|
||||
|
||||
self.download = tk.Menu(self, relief="flat")
|
||||
self.update_btn.configure(menu=self.download, style="Toolbutton")
|
||||
self.download.add_command(
|
||||
label=_("Download"),
|
||||
command=lambda: GiteaUpdate.download(
|
||||
f"{AppConfig.DOWNLOAD_URL}/{res}.zip",
|
||||
res,
|
||||
AppConfig.IMAGE_PATHS["icon_info"],
|
||||
AppConfig.IMAGE_PATHS["icon_vpn"],
|
||||
AppConfig.IMAGE_PATHS["icon_error"],
|
||||
AppConfig.IMAGE_PATHS["icon_msg"]
|
||||
)
|
||||
self.download = tk.Menu(self, relief="flat")
|
||||
self.update_btn.configure(menu=self.download, style="Toolbutton")
|
||||
self.download.add_command(
|
||||
label=_("Download"),
|
||||
command=lambda: GiteaUpdate.download(
|
||||
f"{AppConfig.DOWNLOAD_URL}/{res}.zip",
|
||||
res,
|
||||
AppConfig.IMAGE_PATHS["icon_info"],
|
||||
AppConfig.IMAGE_PATHS["icon_vpn"],
|
||||
AppConfig.IMAGE_PATHS["icon_error"],
|
||||
AppConfig.IMAGE_PATHS["icon_msg"]
|
||||
)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def about() -> None:
|
||||
@ -399,7 +385,7 @@ class FrameWidgets(ttk.Frame):
|
||||
# Disable updates
|
||||
ConfigManager.set("updates", "off")
|
||||
# When updates are disabled, we know the result should be "False"
|
||||
self.update_ui_for_update_status("False")
|
||||
self.update_ui_for_update("False")
|
||||
else:
|
||||
# Enable updates
|
||||
ConfigManager.set("updates", "on")
|
||||
@ -407,7 +393,6 @@ class FrameWidgets(ttk.Frame):
|
||||
try:
|
||||
# Force a fresh check by passing "on" as the update setting
|
||||
res = GiteaUpdate.api_down(AppConfig.UPDATE_URL, AppConfig.VERSION, "on")
|
||||
print(f"API returned: {res}") # Debug output
|
||||
|
||||
# Make sure UI is updated regardless of previous state
|
||||
if hasattr(self, 'update_btn'):
|
||||
@ -416,11 +401,11 @@ class FrameWidgets(ttk.Frame):
|
||||
self.updates_lb.grid_forget()
|
||||
|
||||
# Now update the UI with the fresh result
|
||||
self.update_ui_for_update_status(res)
|
||||
self.update_ui_for_update(res)
|
||||
except Exception as e:
|
||||
print(f"Error checking for updates: {e}")
|
||||
# Fallback to a default message if there's an error
|
||||
self.update_ui_for_update_status("No Internet Connection!")
|
||||
self.update_ui_for_update("No Internet Connection!")
|
||||
|
||||
def tooltip_update_label(self) -> None:
|
||||
"""Updates the tooltip menu label based on the current tooltip status"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user