config-files/.config/qtile/dhk

168 lines
4.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""
This module creates a tabbed window that displays hotkeys and key chords.
The hotkeys are read from two text files, "hotkeys.txt" and "keychords.txt".
The hotkeys are displayed in two tabs, "Hot Keys" and "Key Chords".
The user can switch between the tabs using the "Alt+1" and "Alt+2" hotkeys,
and toggle between the tabs using the "Alt+n" hotkey.
The window is created using PyQt5, which must be installed for this class to work.
"""
import sys
from PyQt5.QtWidgets import (
QApplication,
QMainWindow,
QTabWidget,
QWidget,
QGridLayout,
QLabel,
QShortcut,
)
from PyQt5.QtGui import QKeySequence
class TabbedWindow(QMainWindow):
"""
This class creates a tabbed window that displays hotkeys and key chords.
The hotkeys are read from two text files, "hotkeys.txt" and "keychords.txt".
The hotkeys are displayed in two tabs, "Hot Keys" and "Key Chords".
The user can switch between the tabs using the "Alt+1" and "Alt+2" hotkeys,
and toggle between the tabs using the "Alt+n" hotkey.
The window is created using PyQt5, which must be installed for this module to work.
"""
def __init__(self):
super().__init__()
# Set the main window title and size
self.setWindowTitle("Display Hotkeys")
self.resize(300, 300)
# Create a tab widget
self.tab_widget = QTabWidget()
self.setCentralWidget(self.tab_widget)
# Create the first tab
self.tab1 = QWidget()
self.tab_widget.addTab(self.tab1, "Hot Keys")
# Create a vertical layout for the first tab
layout1 = QGridLayout()
layout1.setHorizontalSpacing(30)
layout1.setVerticalSpacing(10)
with open(
"/home/roland/.config/qtile/hotkeys.txt", encoding="UTF-8"
) as file:
lines = file.readlines()
length = len(lines)
column = 0
row = 0
switch = False
even_odd = 0
for i in range(length):
if lines[i] == "0000\n":
column += 1
row = 0
continue
if lines[i] == "Super + 1: Switch to group 1\n":
switch = True
even_odd = i % 2
if switch and even_odd == 0:
if i % 2 == 0:
label = QLabel(lines[i].strip())
layout1.addWidget(label, row, column)
column += 1
continue
else:
label = QLabel(lines[i].strip())
layout1.addWidget(label, row, column)
row += 1
column -= 1
continue
elif switch and even_odd == 1:
if i % 2 == 1:
label = QLabel(lines[i].strip())
layout1.addWidget(label, row, column)
column += 1
continue
else:
label = QLabel(lines[i].strip())
layout1.addWidget(label, row, column)
row += 1
column -= 1
continue
else:
label = QLabel(lines[i].strip().lstrip("+").strip())
layout1.addWidget(label, row, column)
row += 1
# Set the layout for the first tab
self.tab1.setLayout(layout1)
# Create the second tab
self.tab2 = QWidget()
self.tab_widget.addTab(self.tab2, "Key Chords")
# Create a vertical layout for the second tab
layout2 = QGridLayout()
layout2.setHorizontalSpacing(10)
layout2.setVerticalSpacing(10)
with open(
"/home/roland/.config/qtile/keychords.txt", encoding="UTF-8"
) as file:
lines = file.readlines()
length = len(lines)
column = 0
row = 0
for i in range(length):
if lines[i] == "0000\n":
column += 1
row = 0
continue
row += 1
label = QLabel(lines[i].rstrip())
layout2.addWidget(label, row, column)
# Set the layout for the second tab
self.tab2.setLayout(layout2)
# Assign hotkeys to open each tab
self.hotkey1 = QShortcut(QKeySequence("Alt+1"), self)
self.hotkey1.activated.connect(
lambda: self.tab_widget.setCurrentWidget(self.tab1)
)
self.hotkey2 = QShortcut(QKeySequence("Alt+2"), self)
self.hotkey2.activated.connect(
lambda: self.tab_widget.setCurrentWidget(self.tab2)
)
# Assign a hotkey to toggle between the tabs
self.toggle_key = QShortcut(QKeySequence("Alt+n"), self)
self.toggle_key.activated.connect(self.toggle_tabs)
self.exit_key = QShortcut(QKeySequence("Alt+w"), self)
self.exit_key.activated.connect(sys.exit)
def toggle_tabs(self):
current_index = self.tab_widget.currentIndex()
num_tabs = self.tab_widget.count()
next_index = (current_index + 1) % num_tabs
self.tab_widget.setCurrentIndex(next_index)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TabbedWindow()
window.show()
sys.exit(app.exec_())