-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
307 lines (227 loc) · 11.9 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# для работы с системой
import sys
import sqlite3
import datetime as dt
from itertools import zip_longest
from random import choice
# импорт дополнительного файла
from pic import Statistic, FILES_FROM_PIC
# для удобной работы с qt designer
from PyQt5 import uic
# основные модули для pyqt5
from PyQt5.QtWidgets import QWidget, QApplication, QMainWindow, QAction, qApp, QFileDialog
# импорт дизайна главной программы
from main_design import Ui_MainWindow
# импорт дизайна дополнительной программы программы
from about_design import Ui_about
# id means in shortcuts table(sqlite3):
# 1 - processing buttons from en/ru to ru/en
# 2 - open file
# 3 - save file
# 4 - save file as ...
# 5 - show stats
# 6 - show about info
# 7 - exit application
# главное окно
class MyWidget(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
# скачивание дизайна
self.setupUi(self)
# для окна about
self.about_window = About()
# случайный выбор смешной картинки
self.stats_window = Statistic(choice(FILES_FROM_PIC))
# узнаем дату сегодня
self.today_date = dt.datetime.today().date()
# переменная куда сохраняем путь к файлу .txt
self.file_now = ''
# подключаем бд
con = sqlite3.connect('base.db')
# наводим курсор
cur = con.cursor()
# находим все гор клавиши
self.shortcuts = cur.execute(
'''SELECT shortcut from shortcuts''').fetchall()
# находим дату послед. активности прил.
self.last_active = cur.execute(
'''SELECT mydate from stat WHERE mystatus = 'last_active' ''').fetchone()
# изменяем дату послед. акт. прил. на дату сегодня
self.cash = cur.execute(
"""UPDATE stat SET mydate=? WHERE mystatus = 'last_active' """, (self.today_date,))
# сохраняем все в бд
con.commit()
# закрываем бд
con.close()
# выводим дату посл. акт.
self.text_for_date = f'Last active: {self.last_active[0]}'
self.setStatusTip(self.text_for_date)
# обраб. все горю клавиши в удобный формат
self.shortcuts = tuple(map(lambda x: str(x[0]), self.shortcuts))
# подключаем дополнительный дизайн к глав-окну
self.initUI()
# дополнительный дизайн к глав-окну
def initUI(self):
# подготовка гор. клавиш к использованию - смена клавиш ru/en -> en/ru
self.trans_action = QAction('Change keys', self)
self.trans_action.setShortcut(self.shortcuts[0])
self.trans_action.setStatusTip('Change en/ru keys to ru/en')
self.trans_action.triggered.connect(self.trans)
# подготовка гор. клавиш к использованию - открытие файла
self.open_file_action = QAction('Open', self)
self.open_file_action.setShortcut(self.shortcuts[1])
self.open_file_action.setStatusTip('Open file')
self.open_file_action.triggered.connect(self.open_file)
# подготовка гор. клавиш к использованию - сохранение файла
self.save_file_action = QAction('Save', self)
self.save_file_action.setShortcut(self.shortcuts[2])
self.save_file_action.setStatusTip('Save file in the last directory')
self.save_file_action.triggered.connect(self.save_file)
# подготовка гор. клавиш к использованию - сохранение файла в директории
self.save_as_file_action = QAction('Save as', self)
self.save_as_file_action.setShortcut(self.shortcuts[3])
self.save_as_file_action.setStatusTip('Save file as in the directory')
self.save_as_file_action.triggered.connect(self.save_as_file)
# подготовка гор. клавиш к использованию - показ статистики(на самом деле смешных картинок :) )
self.stats_action = QAction('Show stats', self)
self.stats_action.setShortcut(self.shortcuts[4])
self.stats_action.setStatusTip('Show some statistices about you')
self.stats_action.triggered.connect(self.stats)
# подготовка гор. клавиш к использованию - показ окна about
self.about_action = QAction('About', self)
self.about_action.setShortcut(self.shortcuts[5])
self.about_action.setStatusTip('Show about info')
self.about_action.triggered.connect(self.show_about)
# подготовка гор. клавиш к использованию - выход из программы
self.exit_action = QAction('Exit', self)
self.exit_action.setShortcut(self.shortcuts[6])
self.exit_action.setStatusTip('Exit application')
self.exit_action.triggered.connect(qApp.quit)
# создание статус бара
self.statusBar()
# подключение меню бара
self.menubar = self.menuBar()
# настройка меню
self.fileMenu = self.menubar.addMenu('File')
# подключение вывода окна about к меню
self.fileMenu.addAction(self.about_action)
# подключение функции открытия файла к меню
self.fileMenu.addAction(self.open_file_action)
# подключение функции сохранения файла к меню
self.fileMenu.addAction(self.save_file_action)
# подключение функции сохранения файла(как) к меню
self.fileMenu.addAction(self.save_as_file_action)
# подключение функции перевода символов к меню
self.fileMenu.addAction(self.trans_action)
# подключение функции показа статистики(смешных картинок) к меню
self.fileMenu.addAction(self.stats_action)
# подключение функции выхода из программы к меню
self.fileMenu.addAction(self.exit_action)
# функция перевода символов
def trans(self):
# сохранение выделенного текста в переменную
text_trans = self.plainTextEdit.textCursor().selectedText()
# проверка наличия символов в переменнной
if ''.join(text_trans.split()):
# итоговая строка
text_result = ''
# подключение к бд
con = sqlite3.connect('base.db')
# ставим курсор
cur = con.cursor()
# все буквы en раскладки
letters_en = cur.execute('''SELECT en from letters''').fetchall()
# все буквы ru раскладки
letters_ru = cur.execute('''SELECT ru from letters''').fetchall()
# закрытие бд
con.close()
# обработка информации англ. раскладки
letters_en = map(lambda x: str(x[0]), letters_en)
# обработка информации русс. раскладки
letters_ru = map(lambda x: str(x[0]), letters_ru)
# слияние списков в словарь
letters = dict(zip_longest(letters_en, letters_ru))
# алгоритм перевода символов
for i in text_trans:
end = i
if i in list(letters.keys()):
end = letters[i]
elif i in list(letters.values()):
# поиск ключей по значению
end = list(letters.keys())[list(letters.values()).index(i)]
text_result += end
# заменяем выделленый текст новым
self.plainTextEdit.insertPlainText(text_result)
# функция открытия файла
def open_file(self):
# находим файл
self.file_now = QFileDialog.getOpenFileName(
self, 'Choose file', '',
'text file(*.txt)')[0]
# пробуем открыть и сохранить данные
try:
with open(self.file_now) as f:
self.plainTextEdit.setPlainText(f.read())
# выводим ошибку в случае неудачи
except:
self.setStatusTip('Error. Please, try agian to open file.')
# все хорошо: выводим прежнию информацию
else:
self.setStatusTip(self.text_for_date)
# функция сохр. текста в файл
def save_file(self):
# пробуем сохранить
try:
with open(self.file_now, 'w') as f:
f.write(self.plainTextEdit.toPlainText())
# выводим ошибку в случае неудачи
except:
self.setStatusTip('Error. Please, open file.')
# все хорошо: выводим прежнию информацию
else:
self.setStatusTip(self.text_for_date)
# функция сохр. текста в файл в директории
def save_as_file(self):
# находим файл
self.file_now = QFileDialog.getOpenFileName(
self, 'Choose file', '',
'text file(*.txt)')[0]
# пробуем открыть и сохранить в файл все
try:
with open(self.file_now, 'w') as f:
f.write(self.plainTextEdit.toPlainText())
# выводим ошибку в случае неудачи
except:
self.setStatusTip('Error. Please, try agian to open file.')
# все хорошо: выводим прежнию информацию
else:
self.setStatusTip(self.text_for_date)
# функция показа окна about
def show_about(self):
# показ окна about
self.about_window.show()
# функция отображения картинок
def stats(self):
# выбираем случайную картинку
self.file_from_pic = choice(FILES_FROM_PIC)
# обрабатываем
self.stats_window = Statistic(self.file_from_pic)
# выводим
self.stats_window.show()
# окно about
class About(QWidget, Ui_about):
def __init__(self):
super().__init__()
# подключение дизайна about окна
self.setupUi(self)
# обработка ошибок в pyqt5
def except_hook(cls, exception, traceback):
sys.__excepthook__(cls, exception, traceback)
# включение программы
# начальная настройка
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyWidget()
ex.show()
sys.excepthook = except_hook
sys.exit(app.exec())