init
This commit is contained in:
commit
9383faa009
7 changed files with 144 additions and 0 deletions
25
scripts/create_table.sql
Normal file
25
scripts/create_table.sql
Normal file
|
@ -0,0 +1,25 @@
|
|||
-- 创建账户表
|
||||
CREATE TABLE account (
|
||||
a_id SERIAL PRIMARY KEY,
|
||||
balance DECIMAL(10, 2),
|
||||
meta JSONB
|
||||
);
|
||||
|
||||
-- 创建类别表
|
||||
CREATE TABLE category (
|
||||
c_id SERIAL PRIMARY KEY,
|
||||
type VARCHAR(10),
|
||||
meta JSONB
|
||||
);
|
||||
|
||||
-- 创建流水表
|
||||
CREATE TABLE transaction (
|
||||
t_id SERIAL PRIMARY KEY,
|
||||
amount DECIMAL(10, 2),
|
||||
date DATE,
|
||||
c_id INTEGER REFERENCES category(c_id),
|
||||
a_id INTEGER REFERENCES account(a_id),
|
||||
meta JSONB
|
||||
);
|
||||
|
||||
|
3
src/.gitignore
vendored
Normal file
3
src/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
.venv/*
|
||||
.vscode/*
|
||||
|
14
src/budget/__init__.py
Normal file
14
src/budget/__init__.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
from PyQt6.QtWidgets import *
|
||||
from PyQt6.QtCore import *
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
|
||||
cur = None
|
||||
conn = None
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.initUI()
|
||||
|
||||
from ._mw import initUI
|
||||
from ._pg import connectToDatabase, disconnectFromDatabase, onConnectClicked
|
2
src/budget/_hook.py
Normal file
2
src/budget/_hook.py
Normal file
|
@ -0,0 +1,2 @@
|
|||
from PyQt6.QtWidgets import *
|
||||
from PyQt6.QtCore import *
|
56
src/budget/_mw.py
Normal file
56
src/budget/_mw.py
Normal file
|
@ -0,0 +1,56 @@
|
|||
from PyQt6.QtWidgets import *
|
||||
|
||||
def initUI(self):
|
||||
self.setWindowTitle('budget')
|
||||
self.setGeometry(100, 100, 800, 600)
|
||||
|
||||
# 创建连接信息控件
|
||||
self.hostLabel = QLabel('Host:')
|
||||
self.hostLineEdit = QLineEdit()
|
||||
self.hostLineEdit.setText('localhost')
|
||||
|
||||
self.portLabel = QLabel('Port:')
|
||||
self.portLineEdit = QLineEdit()
|
||||
self.portLineEdit.setText('5432')
|
||||
|
||||
self.dbNameLabel = QLabel('Database:')
|
||||
self.dbNameLineEdit = QLineEdit()
|
||||
self.dbNameLineEdit.setText('budget')
|
||||
|
||||
self.userLabel = QLabel('Username:')
|
||||
self.userLineEdit = QLineEdit()
|
||||
self.userLineEdit.setText('postgres')
|
||||
|
||||
self.passwordLabel = QLabel('Password:')
|
||||
self.passwordLineEdit = QLineEdit()
|
||||
self.passwordLineEdit.setEchoMode(QLineEdit.EchoMode.Password)
|
||||
self.passwordLineEdit.setText('')
|
||||
|
||||
self.connectButton = QPushButton('Connect')
|
||||
self.connectButton.clicked.connect(self.onConnectClicked)
|
||||
|
||||
# 创建连接信息控件布局
|
||||
connectLayout = QHBoxLayout()
|
||||
connectLayout.addWidget(self.hostLabel)
|
||||
connectLayout.addWidget(self.hostLineEdit)
|
||||
connectLayout.addWidget(self.portLabel)
|
||||
connectLayout.addWidget(self.portLineEdit)
|
||||
connectLayout.addWidget(self.dbNameLabel)
|
||||
connectLayout.addWidget(self.dbNameLineEdit)
|
||||
connectLayout.addWidget(self.userLabel)
|
||||
connectLayout.addWidget(self.userLineEdit)
|
||||
connectLayout.addWidget(self.passwordLabel)
|
||||
connectLayout.addWidget(self.passwordLineEdit)
|
||||
connectLayout.addWidget(self.connectButton)
|
||||
|
||||
connectWidget = QWidget()
|
||||
connectWidget.setLayout(connectLayout)
|
||||
|
||||
# 创建主窗口布局
|
||||
mainLayout = QVBoxLayout()
|
||||
mainLayout.addWidget(connectWidget)
|
||||
|
||||
mainWidget = QWidget()
|
||||
mainWidget.setLayout(mainLayout)
|
||||
|
||||
self.setCentralWidget(mainWidget)
|
37
src/budget/_pg.py
Normal file
37
src/budget/_pg.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
from PyQt6.QtWidgets import *
|
||||
import psycopg2
|
||||
|
||||
def connectToDatabase(self):
|
||||
try:
|
||||
self.conn = psycopg2.connect(database=self.dbName, user=self.user, password=self.password, host=self.host, port=self.port)
|
||||
self.cur = self.conn.cursor()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
self.cur = None
|
||||
QMessageBox.critical(self, 'Error', str(e))
|
||||
|
||||
def disconnectFromDatabase(self):
|
||||
try:
|
||||
if (self.cur is None):
|
||||
raise Exception('Not connected to database')
|
||||
self.cur.close()
|
||||
self.conn.close()
|
||||
self.cur = None
|
||||
except Exception as e:
|
||||
print(e)
|
||||
QMessageBox.critical(self, 'Error', str(e))
|
||||
|
||||
|
||||
def onConnectClicked(self):
|
||||
if self.connectButton.text() == 'Connect':
|
||||
self.host = self.hostLineEdit.text()
|
||||
self.port = self.portLineEdit.text()
|
||||
self.dbName = self.dbNameLineEdit.text()
|
||||
self.user = self.userLineEdit.text()
|
||||
self.password = self.passwordLineEdit.text()
|
||||
# 连接到 PostgreSQL 数据库
|
||||
self.connectToDatabase()
|
||||
self.connectButton.setText('Disconnect')
|
||||
else:
|
||||
self.disconnectFromDatabase()
|
||||
self.connectButton.setText('Connect')
|
7
src/main.py
Normal file
7
src/main.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from budget import *
|
||||
import sys
|
||||
if __name__ == '__main__':
|
||||
app = QApplication(sys.argv)
|
||||
mw = MainWindow()
|
||||
mw.show()
|
||||
sys.exit(app.exec())
|
Loading…
Reference in a new issue