170 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.7 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)
 | 
						|
 | 
						|
    # Add the numbers 1-100 to the layout
 | 
						|
    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())
 | 
						|
        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)
 | 
						|
 | 
						|
    # Add the numbers 101-200 to the layout
 | 
						|
    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_())
 |