Start Creating Native Configure Page using PyQt

This commit is contained in:
Debanjum Singh Solanky 2022-08-06 15:18:28 +03:00
parent c5bf051a29
commit eacd95bebd

View file

@ -6,7 +6,8 @@ import webbrowser
import uvicorn
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6 import QtGui, QtWidgets
from PyQt6.QtCore import Qt, QThread
# Internal Packages
from src.configure import configure_server
@ -28,6 +29,7 @@ def run():
gui = QtWidgets.QApplication([])
gui.setQuitOnLastWindowClosed(False)
tray = create_system_tray()
window = ConfigureWindow()
# Start Application Server
server = ServerThread(app, host, port, socket)
@ -35,11 +37,12 @@ def run():
gui.aboutToQuit.connect(server.terminate)
# Start the GUI
window.show()
tray.show()
gui.exec()
class ServerThread(QtCore.QThread):
class ServerThread(QThread):
def __init__(self, app, host=None, port=None, socket=None):
super(ServerThread, self).__init__()
self.app = app
@ -57,6 +60,48 @@ class ServerThread(QtCore.QThread):
uvicorn.run(app, host=self.host, port=self.port)
# Subclass QMainWindow to customize your application's main window
class ConfigureWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Khoj - Configure")
self.layout = QtWidgets.QVBoxLayout()
enable_orgmode_search = QtWidgets.QCheckBox("Enable Search on Org-Mode Files")
enable_orgmode_search.stateChanged.connect(self.show_orgmode_search_options)
self.layout.addWidget(enable_orgmode_search)
enable_ledger_search = QtWidgets.QCheckBox("Enable Search on Beancount Files")
enable_ledger_search.stateChanged.connect(self.show_ledger_search_options)
self.layout.addWidget(enable_ledger_search)
# Set the central widget of the Window. Widget will expand
# to take up all the space in the window by default.
# Create Widget for Setting Directory with Org-Mode Files
self.config_window = QtWidgets.QWidget()
self.config_window.setLayout(self.layout)
self.setCentralWidget(self.config_window)
def show_orgmode_search_options(self, s):
if Qt.CheckState(s) == Qt.CheckState.Checked:
self.config_window.layout().addWidget(QtWidgets.QLabel("Search Org-Mode Files"))
self.config_window.layout().addWidget(QtWidgets.QLineEdit())
else:
self.config_window.layout().removeWidget(self.config_window.layout().itemAt(2).widget())
self.config_window.layout().removeWidget(self.config_window.layout().itemAt(2).widget())
def show_ledger_search_options(self, s):
if Qt.CheckState(s) == Qt.CheckState.Checked:
self.config_window.layout().addWidget(QtWidgets.QLabel("Search Ledger Files"))
self.config_window.layout().addWidget(QtWidgets.QLineEdit())
else:
self.config_window.layout().removeWidget(self.config_window.layout().itemAt(2).widget())
self.config_window.layout().removeWidget(self.config_window.layout().itemAt(2).widget())
def create_system_tray():
"""Create System Tray with Menu
Menu Actions should contain
@ -90,6 +135,15 @@ def create_system_tray():
return tray
def create_window_to_configure_khoj():
"""Create Window to Configure Khoj
Allow user to
1. Enable/Disable search on 1. org-mode, 2. markdown, 3. beancount or 4. image content types
2. Configure the server host and port
3. Save the configuration to khoj.yml and start the server
"""
if __name__ == '__main__':
run()