From a7ac543719070a28545e354ff54c585af426df46 Mon Sep 17 00:00:00 2001 From: B Stack Date: Wed, 12 Jun 2019 21:42:27 -0400 Subject: add main components for tcl frontend The tcl version now accepts button presses and key presses. It has the buttons in the same layout as the gtk frontend. Also had to modify the action functions, to accept an additional useless parameter because of how tkinter was calling the functions. Still need to add icons. --- lmlib.py | 10 +++--- logout-manager-tcl.py | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 5 deletions(-) mode change 100755 => 100644 lmlib.py create mode 100755 logout-manager-tcl.py diff --git a/lmlib.py b/lmlib.py old mode 100755 new mode 100644 index 364dd9a..a5206e5 --- a/lmlib.py +++ b/lmlib.py @@ -19,27 +19,27 @@ logout_manager_version="2019-06-12b" class Actions: @staticmethod - def hibernate(config): + def hibernate(config, event=None): #print("need to run the /sys/power/state trick, if available") print(config.get_hibernate_command()) @staticmethod - def lock(config): + def lock(config, event=None): #print("please lock the screen.") print(config.get_lock_command()) @staticmethod - def logout(config): + def logout(config, event=None): #print("please log out of current session!") print(config.get_logout_command()) @staticmethod - def reboot(config): + def reboot(config, event=None): #print("please reboot.") print(config.get_reboot_command()) @staticmethod - def shutdown(config): + def shutdown(config, event=None): #print("please shut yourself down!") print(config.get_shutdown_command()) diff --git a/logout-manager-tcl.py b/logout-manager-tcl.py new file mode 100755 index 0000000..c605dc0 --- /dev/null +++ b/logout-manager-tcl.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +# Startdate: 2019-06-12 20:05 +# WORKHERE: +# add icons +# add full headers + +# References: +# http://effbot.org/tkinterbook/button.htm +# http://effbot.org/tkinterbook/tkinter-application-windows.htm +# http://effbot.org/tkinterbook/ +# pass parameters to function of Button(command=) https://stackoverflow.com/questions/38749620/python-3-tkinter-button-commands#38750155 +# alternate for passing params https://stackoverflow.com/questions/6920302/how-to-pass-arguments-to-a-button-command-in-tkinter +# https://stackoverflow.com/questions/18537918/set-window-icon#18538416 +# the exact syntax for master.bind https://stackoverflow.com/questions/16082243/how-to-bind-ctrl-in-python-tkinter + +import os, sys +sys.path.append("/home/bgirton/dev/logout-manager") +import lmlib +from tkinter import * +from functools import partial + +config = lmlib.Initialize_config() +actions = lmlib.Actions + +# graphical classes and functions +print("Loading graphics...") + +def icon_bitmap(name = "", theme = "default", size = "48"): + # WORKHERE: can build some tool that loops through the icon theme dirs + # if name is a specific filename, just use it. + # if the only thing that is found during the looping is a svg, return None + # if the valid file provided is svg, then try a few derivations to get a png, else return None + imgicon = PhotoImage(file=os.path.join("/usr/share/icons/Adwaita/24x24/actions","system-log-out.png")) + return imgicon + +class App: + def __init__(self, master): + frame = Frame(master) + frame.grid(row=0) + + self.buttonLock = Button(frame, text="Lock", underline=3, command=partial(actions.lock,config)) + #self.buttonLock.pack(side=LEFT) + self.buttonLock.grid(row=0,column=0) + # WORKS master.bind_all("", something) + # PASSES 2 params when expecting 1 master.bind_all("", self.buttonLock.invoke) + master.bind_all("", partial(actions.lock,config)) + + self.buttonLogout = Button(frame, text="Logout", underline=0, command=lambda: actions.logout(config)) + self.buttonLogout.grid(row=0,column=1) + master.bind_all("", partial(actions.logout,config)) + + self.buttonHibernate = Button(frame, text="Hibernate", underline=0, command=lambda: actions.hibernate(config)) + self.buttonHibernate.grid(row=0,column=2) + master.bind_all("", partial(actions.hibernate,config)) + + self.buttonShutdown = Button(frame, text="Shutdown", underline=0, command=lambda: actions.shutdown(config)) + self.buttonShutdown.grid(row=0,column=3) + master.bind_all("", partial(actions.shutdown,config)) + + self.buttonReboot = Button(frame, text="Reboot", underline=0, command=lambda: actions.reboot(config)) + self.buttonReboot.grid(row=0,column=4) + master.bind_all("", partial(actions.reboot,config)) + + #self.buttonCancel = Button(frame, text="Cancel", underline=0, command=frame.quit) + self.buttonCancel = Button(frame, text="Cancel", underline=0, command=self.quitaction) + self.buttonCancel.grid(row=1,columnspan=8,sticky=W+E) + master.bind_all("", self.quitaction) + + # Found this after trial and error. + def quitaction(self,b=None): + print("Cancel any logout action.") + root.destroy() + +# Left here as an example for a mster.bind_all that works. +#def something(event=None): +# print("Got here!") + +root = Tk() + +# MAIN LOOP +root.title("Log out options") +#root.iconbitmap(r'/usr/share/icons/Numix/48/actions/system-logout.svg') +imgicon = PhotoImage(file=os.path.join("/usr/share/icons/Adwaita/24x24/actions","system-log-out.png")) +root.tk.call('wm','iconphoto', root._w, imgicon) +app = App(root) +root.mainloop() +try: + root.destroy() +except: + pass -- cgit