Я написал приложение на Питоне 3.4.4, и на библиотеки Tkinter не спешите в меня кидать помидорами, такое решение обусловлено тем, что это приложение будет использовать на разных машинах, а на некоторых из них стоят древние Windows, например XP.
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
import socket
import os
from datetime import datetime
import json
# Функция для отправки данных на сервер через WebSocket
def send_data_to_server(data):
import websocket
try:
ws = websocket.create_connection("ws://server:3000")
ws.send(json.dumps(data))
ws.close()
except Exception as e:
messagebox.showerror("Ошибка", f"Ошибка при отправке данных: {e}")
# Эта функция будет вызываться при нажатии на кнопку
def on_button_click():
user_input1 = entry1.get()
user_input2 = entry2.get()
user_input3 = entry3.get()
device_type = device_type_var.get()
additional_option = additional_device_var.get()
issues_input = text_area.get("1.0", "end-1c")
data = {
"machine": user_input1,
"user": user_input2,
"date": user_input3,
"device_type": device_type,
"additional_option": additional_option,
"issues": issues_input
}
messagebox.showinfo("Информация", f"Вы ввели:\nМашина: {user_input1}\nПользователь: {user_input2}\nДата: {user_input3}\nТип устройства: {device_type}\nДополнительно: {additional_option}\nНеполадки оборудования, пожелания, просьбы итд.: {issues_input}")
send_data_to_server(data)
# Функция для обновления второго Combobox
def update_additional_options(event):
selected_device = device_type_var.get()
options = {
"Принтер": ["Canon MF212w", "Canon MF3010", "Canon 4410/MF4430", "Decelop ineo+ 200", "Epson FX-1000", "Epson FX-1050", "Epson FX-1170", "Epson Fx-2190", "Epson LX-1170", "HP DesigJet 500", "HP LaserJet 5100", "HP LaserJet PRO M227sdn", "Kyosera TASKalfa 2201", "Kyosera TASKalfa 3510i", "OCE OlotWave 300", "Samsung ML-1250", "Samsung SCX-4300", "Xerox DocuOrint P8ex", "Xerox WC 3119", "Xerox WorkCentere M128"],
"Сканер": ["Epson Perfection 4490"]
}
if selected_device in options:
additional_device_menu['values'] = ["(Выберите устройство)"] + options[selected_device]
additional_device_menu['state'] = 'readonly'
additional_device_menu.current(0)
else:
additional_device_var.set("(Выберите тип устройства)")
additional_device_menu['state'] = 'disabled'
# Получение сетевого имени машины, имени пользователя и текущей даты
hostname = socket.gethostname()
username = os.getlogin()
current_date = datetime.today().strftime('%Y-%m-%d')
# Создание основного окна
root = tk.Tk()
root.title("Замена ISP")
root.geometry("600x500")
# Создание фрейма для меток и текстовых полей
frame = tk.Frame(root)
frame.pack(pady=20, padx=20)
# Создание первой метки и текстового поля ввода
tk.Label(frame, text="Машина:").grid(row=0, column=0, sticky=tk.W, padx=5, pady=5)
entry1 = tk.Entry(frame)
entry1.grid(row=0, column=1, sticky="ew", padx=5, pady=5)
entry1.insert(0, hostname)
# Создание второй метки и текстового поля ввода
tk.Label(frame, text="Пользователь:").grid(row=1, column=0, sticky=tk.W, padx=5, pady=5)
entry2 = tk.Entry(frame)
entry2.grid(row=1, column=1, sticky="ew", padx=5, pady=5)
entry2.insert(0, username)
# Создание третьей метки и текстового поля ввода
tk.Label(frame, text="Дата:").grid(row=2, column=0, sticky=tk.W, padx=5, pady=5)
entry3 = tk.Entry(frame)
entry3.grid(row=2, column=1, sticky="ew", padx=5, pady=5)
entry3.insert(0, current_date)
#Создание четвёртой метки и Combobox для выбора типа устройства
tk.Label(frame, text="Тип устройства:").grid(row=3, column=0, sticky=tk.W, padx=5, pady=5)
device_type_var = tk.StringVar(value="(Выберите устройство)")
device_type_menu = ttk.Combobox(frame, textvariable=device_type_var,
values=["(Выберите устройство)", "Восстановление удалённого файла", "Клавиатура", "Коврик", "Монитор", "Мышь", "Отправка почты", "Пожелать удачного дня", "Принтер", "Программное обеспечение", "Прочее...", "Сеть", "Системный блок", "Сканер"],
state="readonly")
device_type_menu.grid(row=3, column=1, sticky="ew", padx=5, pady=5)
device_type_menu.current(0)
device_type_menu.bind("<<ComboboxSelected>>", update_additional_options)
# Создание пятой метки и Combobox для дополнительных опций устройств
tk.Label(frame, text="Дополнительное устройство:").grid(row=4, column=0, sticky=tk.W, padx=5, pady=5)
additional_device_var = tk.StringVar(value="(Выберите устройство)")
additional_device_menu = ttk.Combobox(frame, textvariable=additional_device_var, state="disabled", width=35)
additional_device_menu.grid(row=4, column=1, sticky="ew", padx=5, pady=5)
# Создание метки и области для ввода текста
tk.Label(frame, text="Неполадки оборудования, пожелания, просьбы итд.:").grid(row=5, column=0, columnspan=2, sticky=tk.W, padx=5, pady=5)
text_area = tk.Text(frame, wrap='word', height=10)
text_area.grid(row=6, column=0, columnspan=2, sticky="ew", padx=5, pady=5)
# Создание кнопки
button = tk.Button(root, text="Оформить заказ", command=on_button_click)
button.pack(pady=10)
# Запуск основного цикла
root.mainloop()
Ну вот я его написал и решил сделать из него .exe-файл при помощи команды.
python -m PyInstaller --onedir --windowed что-то.py --noupx
и попробовав запустить этот .exe, я ждал довольно немало, прежде чем скрипт сработал. Как мне уменьшить время открытия файла?