import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QVBoxLayout, QWidget, QAction, QFileDialog
class HTMLEditor(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.textEdit = QTextEdit(self)
self.setCentralWidget(self.textEdit)
openFile = QAction('Open', self)
openFile.triggered.connect(self.openFile)
saveFile = QAction('Save', self)
saveFile.triggered.connect(self.saveFile)
self.toolbar = self.addToolBar('Toolbar')
self.toolbar.addAction(openFile)
self.toolbar.addAction(saveFile)
self.setWindowTitle('HTML Editor')
self.show()
def openFile(self):
fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')[0]
if fname:
with open(fname, 'r') as f:
self.textEdit.setText(f.read())
def saveFile(self):
fname = QFileDialog.getSaveFileName(self, 'Save file', '/home')[0]
if fname:
with open(fname, 'w') as f:
f.write(self.textEdit.toHtml())
def main():
app = QApplication(sys.argv)
editor = HTMLEditor()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Пересборка проекта в exe-файл: import os
import subprocess
def rebuild():
subprocess.call(['pyinstaller', '--onefile', 'main.py'])
if __name__ == "__main__":
rebuild()
АвторизацияИнтеграция всех частей: import tkinter as tk
from tkinter import messagebox
import os
import hashlib
import json
# Путь к файлу с данными пользователя
USER_DATA_FILE = "user_data.json"
# Функция для хеширования пароля
def hash_password(password):
return hashlib.sha256(password.encode()).hexdigest()
# Функция для загрузки данных пользователя
def load_user_data():
if os.path.exists(USER_DATA_FILE):
with open(USER_DATA_FILE, "r") as file:
return json.load(file)
else:
default_data = {"username": "admin", "password": hash_password("admin")}
with open(USER_DATA_FILE, "w") as file:
json.dump(default_data, file)
return default_data
# Функция для сохранения данных пользователя
def save_user_data(username, password):
with open(USER_DATA_FILE, "w") as file:
json.dump({"username": username, "password": hash_password(password)}, file)
# Функция для проверки логина и пароля
def authenticate(username, password):
user_data = load_user_data()
return user_data["username"] == username and user_data["password"] == hash_password(password)
# Функция для смены логина и пароля
def change_credentials():
def save_new_credentials():
new_username = new_username_entry.get()
new_password = new_password_entry.get()
save_user_data(new_username, new_password)
messagebox.showinfo("Успех", "Логин и пароль успешно изменены")
change_window.destroy()
change_window = tk.Toplevel(root)
change_window.title("Смена логина и пароля")
tk.Label(change_window, text="Новый логин").pack()
new_username_entry = tk.Entry(change_window)
new_username_entry.pack()
tk.Label(change_window, text="Новый пароль").pack()
new_password_entry = tk.Entry(change_window, show="*")
new_password_entry.pack()
tk.Button(change_window, text="Сохранить", command=save_new_credentials).pack()
# Функция для пересборки проекта
def rebuild_project():
os.system("pyinstaller --onefile main.py")
messagebox.showinfo("Успех", "Проект пересобран в exe-файл")
# Основная функция программы
def main():
global root
root = tk.Tk()
root.title("HTML-редактор")
# Функция для сохранения HTML
def save_html():
html_content = text_editor.get("1.0", tk.END)
with open("index.html", "w") as file:
file.write(html_content)
messagebox.showinfo("Успех", "HTML сохранен")
# Функция для входа в систему
def login():
username = username_entry.get()
password = password_entry.get()
if authenticate(username, password):
login_window.destroy()
create_editor()
else:
messagebox.showerror("Ошибка", "Неправильный логин или пароль")
# Создание окна авторизации
login_window = tk.Toplevel(root)
login_window.title("Вход")
tk.Label(login_window, text="Логин").pack()
username_entry = tk.Entry(login_window)
username_entry.pack()
tk.Label(login_window, text="Пароль").pack()
password_entry = tk.Entry(login_window, show="*")
password_entry.pack()
tk.Button(login_window, text="Войти", command=login).pack()
# Создание окна редактора
def create_editor():
global text_editor
text_editor = tk.Text(root)
text_editor.pack()
tk.Button(root, text="Сохранить HTML", command=save_html).pack()
tk.Button(root, text="Пересобрать проект", command=rebuild_project).pack()
tk.Button(root, text="Сменить логин и пароль", command=change_credentials).pack()
root.mainloop()
if __name__ == "__main__":
main()
С помощью которой нужно просто создавать странички по своему вкусу.
В программе должна быть функция "пере сборки проекта" в один exe-файл.
Этот новый exe-файл должен включать в себя все изменения последнего редактирования, также должна сохраняться весь изначальный функционал после пере сборки.
Также в программе должен быть запрос логина и пароля при запуске, и возможность его замены.