That makes sense. But thank you for the support, anyway. I already found another problem to solve!
Em domingo, 14 de março de 2021 às 16:58:20 UTC-3, elParaguayo escreveu: > It may be to do with the "super" syntax. Not sure you need to pass the > first "self" in that line. > > On Sunday, 14 March 2021 at 19:53:12 UTC elParaguayo wrote: > >> Not immediately sure why it's conflicting but it's definitely not needed >> in your code as it's not adding anything to the button_press method. >> >> >> >> On Sunday, 14 March 2021 at 19:48:33 UTC [email protected] wrote: >> >>> I commented out the button_press function and it worked! Any ideas why >>> it conflicted with self.add_callbacks? >>> >>> Em domingo, 14 de março de 2021 às 16:16:17 UTC-3, elParaguayo escreveu: >>> >>>> There's no space in "Button1" etc. >>>> >>>> On Sunday, 14 March 2021 at 19:13:54 UTC [email protected] wrote: >>>> >>>>> from dynmen.rofi import Rofi >>>>> from dynmen.dmenu import DMenu >>>>> >>>>> from libqtile.widget import base >>>>> from taskw import TaskWarrior >>>>> >>>>> class TaskWarriorWidget(base.ThreadPoolText): >>>>> """ TaskWarrior Widget >>>>> >>>>> Widget requirements: taskw, taskwarrior, dynmen. >>>>> >>>>> This widget displays your task to do in the qtile status bar and >>>>> shows if it is active. >>>>> >>>>> Mouse callbacks: >>>>> Left click start/stop the task. >>>>> Right click displays a menu in rofi or dmenu with all >>>>> available tasks to start/stop at selection. >>>>> Rolling mousewheel on widget changes the showing task. >>>>> >>>>> """ >>>>> >>>>> orientations = base.ORIENTATION_HORIZONTAL >>>>> defaults = [ >>>>> ('config_file', '~/.taskrc', 'Default config place of >>>>> taskwarrior'), >>>>> ('selected_menu', 'rofi', 'Default menu selection of task is >>>>> rofi'), >>>>> ('update_interval', 0.5, 'Delay in seconds between updates'), >>>>> ] >>>>> >>>>> def __init__(self, **config): >>>>> super().__init__('', **config) >>>>> self.add_defaults(TaskWarriorWidget.defaults) >>>>> self.text = 'No tasks scheduled' >>>>> self.tw = TaskWarrior(config_filename=self.config_file) >>>>> self.pending_tasks = >>>>> self.tw.filter_tasks(dict(status='pending')) >>>>> self.started = ' inactive' >>>>> self.num_id = 1 >>>>> self.menus = dict(rofi = Rofi, dmenu = DMenu) >>>>> self.menu = self.menus[self.selected_menu]() >>>>> >>>>> self.add_callbacks({ >>>>> 'Button 1': self.toggle_task, >>>>> 'Button 2': self.menu_task, >>>>> 'Button 4': self.next_task, >>>>> 'Button 5': self.previous_task >>>>> }) >>>>> >>>>> def poll(self): >>>>> self.text = self.tw.get_task(id = >>>>> self.num_id)[-1]['description'] >>>>> return self.text + self.started >>>>> >>>>> def button_press(self, x, y, button): >>>>> super().button_press(self, x, y, button) >>>>> >>>>> def toggle_task(self): >>>>> # Left click toggles(active, inactive) the task showed on the >>>>> qtile bar >>>>> try: >>>>> self.tw.get_task(id = self.num_id)[-1]['start'] >>>>> except KeyError: >>>>> self.tw.task_start(id = self.num_id) >>>>> self.started = ' active' >>>>> else: >>>>> self.tw.task_stop(id = self.num_id) >>>>> self.started = ' inactive' >>>>> >>>>> def menu_task(self): >>>>> opts = {t['description']:t['id'] for t in self.pending_tasks} >>>>> self.menu.prompt = 'Select the task to start/stop: ' >>>>> index = self.menu(opts).value >>>>> self.num_id = self.pending_tasks[index]['id'] >>>>> self.toggle_task() >>>>> >>>>> def next_task(self): >>>>> # Shows on the bar the next task in order of urgency >>>>> self.num_id += 1 if self.num_id < len(self.pending_tasks) else >>>>> 0 >>>>> >>>>> def previous_task(self): >>>>> # Shows on the bar the previous task in order of urgency >>>>> self.num_id -= 1 if self.num_id > 1 else >>>>> -(len(self.pending_tasks)-2) >>>>> >>>>> >>>>> Em domingo, 14 de março de 2021 às 15:45:31 UTC-3, elParaguayo >>>>> escreveu: >>>>> >>>>>> I'd use the self.add_callbacks method as this is what most widgets >>>>>> use. >>>>>> >>>>>> Do you have some code you can share? Much easier to help if we can >>>>>> see your actual code, otherwise we're just guessing. >>>>>> On Sunday, 14 March 2021 at 18:30:22 UTC [email protected] wrote: >>>>>> >>>>>>> Hi everyone! So I'm working on a widget from scratch that shows >>>>>>> taskwarrior tasks. I've already tweaked some other widgets to get a >>>>>>> better >>>>>>> notion of how it works and I'm much more confident now to create my own. >>>>>>> The widget is already displaying the first task on the bar, but for >>>>>>> some reason I can't get the button callbacks to work. Is there a good >>>>>>> way >>>>>>> to debug those? Because I tested the functions and they were working as >>>>>>> supposed to, but I couldn't test the callbacks itself properly. >>>>>>> I also saw that there are two main ways to make those callbacks. One >>>>>>> is to add the self.add_callbacks(dict_of_callbacks), with the buttons >>>>>>> as >>>>>>> keys and functions as values respectively, and the other is identifying >>>>>>> the >>>>>>> buttons directly from the button_press function. Are there too many >>>>>>> differences besides the first one seems more cleaner to me? I did >>>>>>> inherited >>>>>>> the button_press function from the upper class. >>>>>>> Oh my widget inherits from ThreadPool, by the way, and I set up the >>>>>>> update_interval to something like 0.5. >>>>>>> >>>>>> -- You received this message because you are subscribed to the Google Groups "qtile-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/qtile-dev/7a4f187b-6407-4c0c-8834-8444f15853efn%40googlegroups.com.
