def update_icon(self): percent, is_charging = self.get_battery_info() if percent is not None: icon_name = self.get_icon_name(percent, is_charging) self.indicator.set_icon(icon_name) # Update menu items for item in self.menu.get_children(): if item.get_label() == "Battery Percentage": item.set_label(f"Battery Percentage: percent%") elif item.get_label() == "Status": status = "Charging" if is_charging else "Discharging" item.set_label(f"Status: status") # Update every minute threading.Timer(60, self.update_icon).start()
override init() super.init() setupStatusItem() startMonitoring() add battery icon to taskbar
private func setupStatusItem() statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) if let button = statusItem?.button button.title = getBatteryPercentage() button.action = #selector(toggleMenu) button.target = self setupMenu() def update_icon(self): percent, is_charging = self
def create_battery_icon(self, percent, is_charging): # Create icon image size = 64 image = Image.new('RGBA', (size, size), (0, 0, 0, 0)) draw = ImageDraw.Draw(image) # Battery outline draw.rectangle( [(8, 20), (56, 44)], outline='white', width=2 ) # Battery terminal draw.rectangle( [(56, 28), (60, 36)], fill='white' ) # Battery level fill_width = int(48 * (percent / 100)) draw.rectangle( [(10, 22), (10 + fill_width, 42)], fill='#00ff00' if percent > 20 else '#ff0000' ) # Charging indicator if is_charging: draw.line([(28, 12), (36, 12)], fill='#00ff00', width=2) draw.line([(32, 12), (32, 20)], fill='#00ff00', width=2) return image def update_icon(self): percent
def quit(self, source): Gtk.main_quit() if == " main ": indicator = BatteryIndicator() Gtk.main() macOS (Swift) import Cocoa import IOKit.ps class BatteryStatusItem: NSObject private var statusItem: NSStatusItem? private var timer: Timer?
def show_battery_info(self): percent, is_charging = self.get_battery_status() status = f"Battery: percent%\n" status += "Charging" if is_charging else "Discharging" # Create popup window root = tk.Tk() root.title("Battery Status") root.geometry("300x150") label = tk.Label(root, text=status, font=("Arial", 12)) label.pack(pady=20) progress = ttk.Progressbar(root, length=200, mode='determinate') progress['value'] = percent progress.pack(pady=10) tk.Button(root, text="Close", command=root.destroy).pack(pady=10) root.mainloop()