Очистка страницы после выхода
Всем привет. Когда мы нажимаем на кнопку то мы переходим на следующую страницу и вводим данным, но когда мы выходим из неё и снова приходим то данные на полях они сохранятся. В меню есть действие и это действие отвечает за очистку страницу если оно установлено то очистка есть, а если нет то её не будет. Так вот как можно реализовать очистку страницу после её выхода, и при этом действие очистки оно установлено. Буду очень благодарен!
файл 1
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import QtWidgets
import window_1
import sys
import os
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self);
self.centralWidget = QtWidgets.QWidget() # создаём центральный виджет
self.setCentralWidget(self.centralWidget)
self.mainLayout = QtWidgets.QVBoxLayout(self.centralWidget)
self.window_1 = window_1.Page_find_numbers(self)
# settings
self.setFixedSize(640, 620)
self.setWindowTitle(" B U G ")
# делаем сборку
self.widget_main = self.createPage()
self.mainLayout.addWidget(self.widget_main)
self.createMenuBar()
self.createToolBar()
# вывод информации на строку состояния
self.label_1 = QtWidgets.QLabel("v 1.0")
self.label_1.setStyleSheet("font-size: 18px; color: black;")
self.status_1.addPermanentWidget(self.label_1)
self.status_1.showMessage("Добро пожаловать", msecs = 4000)
self.setStatusBar(self.status_1)
def createPage(self):
self.widget_page = QtWidgets.QWidget()
# создание обьектов
self.button_1 = QtWidgets.QPushButton("Перейти к поиску телефонных\nномеров и электронных почт")
self.formbox = QtWidgets.QGridLayout()
# добавление в box и в окно
self.formbox.addWidget(self.button_1)
self.formbox.setSpacing(20)
self.widget_page.setLayout(self.formbox)
# датчики и события
self.button_1.clicked.connect(self.clickedButton_1)
# сделать главным комонентом в общем
return self.widget_page # возращает
def createMenuBar(self):
# создание панели-меню и строки состоянии
self.menu = QtWidgets.QMenuBar()
self.status_1 = QtWidgets.QStatusBar()
# создание категорий меню и функционал в ней
self.menu_options = QtWidgets.QMenu("Опции")
self.menu_view = QtWidgets.QMenu('Вид')
self.menu_help = QtWidgets.QMenu("Справка")
# просто настройки
self.sub_menu_options = QtWidgets.QMenu("Настройки")
self.action_clear_page = QtWidgets.QAction("Очистка страницы после выхода")
self.action_clear_page.setCheckable(True)
self.sub_menu_options.addAction(self.action_clear_page)
self.menu_options.addMenu(self.sub_menu_options)
# настройки поиска
self.sub_menu_options_search = QtWidgets.QMenu("Настройки поиска")
self.action_search_options_1 = QtWidgets.QAction("Искать всё")
self.action_search_options_1.setCheckable(True)
self.action_search_options_1.setChecked(True)
self.action_search_options_2 = QtWidgets.QAction("Телефонные номера")
self.action_search_options_2.setCheckable(True)
self.action_search_options_3 = QtWidgets.QAction("Электронные почты и акк")
self.action_search_options_3.setCheckable(True)
self.group_action_1 = QtWidgets.QActionGroup(self.sub_menu_options_search)
self.group_action_1.addAction(self.action_search_options_1) # добавление в groupbox
self.group_action_1.addAction(self.action_search_options_2)
self.group_action_1.addAction(self.action_search_options_3)
self.sub_menu_options_search.addAction(self.action_search_options_1) # добавление в вложенное
self.sub_menu_options_search.addAction(self.action_search_options_2) # меню
self.sub_menu_options_search.addAction(self.action_search_options_3)
self.menu_options.addMenu(self.sub_menu_options_search) # добавление в меню опции
# добавляем отдельное меню в главное меню
self.menu.addMenu(self.menu_options)
self.menu.addMenu(self.menu_view)
self.menu.addMenu(self.menu_help)
# добавляем в окно
self.setMenuBar(self.menu)
def createToolBar(self):
self.toolBar = QtWidgets.QToolBar()
self.action_back = QtWidgets.QAction("Вернуться назад")
self.toolBar.addAction(self.action_back)
self.addToolBar(self.toolBar)
# методы для датчиков
def clickedButton_1(self):
widget = self.centralWidget.layout().itemAt(0).widget()
self.centralWidget.layout().removeWidget(widget)
widget.hide()
self.window_1.show()
self.action_back.triggered.connect(self.clickedActionBack)
self.mainLayout.addWidget(self.window_1)
def clickedActionBack(self):
widget = self.centralWidget.layout().itemAt(0).widget()
self.centralWidget.layout().removeWidget(widget)
widget.hide()
self.widget_main = self.createPage()
self.mainLayout.addWidget(self.widget_main)
# условие для очищений полей при выходе из страничек
if self.action_clear_page.isChecked() == True:
self.window_1.textedit_1.clear
self.window_1.textedit_2.clear
if __name__ == '__main__':
app = QApplication(sys.argv)
if os.name == 'nt': # если виндовс
import ctypes
myappid = 'mycompany.myproduct.subproduct.version'
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
app.setWindowIcon(QtGui.QIcon("settings\\bug.ico"))
MainWindow = MainWindow()
MainWindow.show()
sys.exit(app.exec_())
файл 2
from PyQt5 import QtCore
from PyQt5 import QtWidgets
import shutil
import os
import re
class Page_find_numbers(QtWidgets.QWidget):
def __init__(self, parent = None):
super().__init__(parent)
self.parent = parent
# списки для хранения найденных данных в тексте
self.email_text = []
self.telephon_text = []
# обьекты
self.button_clear = QtWidgets.QPushButton("Очистить")
self.button_find = QtWidgets.QPushButton("Запустить")
self.button_save = QtWidgets.QPushButton("Сохранить\nв txt-файл")
self.button_delete = QtWidgets.QPushButton("Удалить\nданные")
self.label_1 = QtWidgets.QLabel("Вставте сюда текст, в котором хотите\nнайти телефонные номера и электронные\nпочты.")
self.label_2 = QtWidgets.QLabel("Результат:")
self.textedit_1 = QtWidgets.QTextEdit()
self.textedit_2 = QtWidgets.QTextEdit()
self.textedit_2.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction)
self.gridbox = QtWidgets.QGridLayout()
# добавление в box
self.gridbox.addWidget(self.label_1, 0, 0)
self.gridbox.addWidget(self.label_2, 2, 0)
self.gridbox.addWidget(self.button_find, 0, 1)
self.gridbox.addWidget(self.button_clear, 1, 1)
self.gridbox.addWidget(self.button_save, 4, 1, alignment = QtCore.Qt.AlignTop)
self.gridbox.addWidget(self.button_delete, 4, 1, alignment = QtCore.Qt.AlignBottom)
self.gridbox.addWidget(self.textedit_1, 1, 0)
self.gridbox.addWidget(self.textedit_2, 4, 0)
self.gridbox.setVerticalSpacing(18)
self.setLayout(self.gridbox)
# датчики событий
self.button_clear.clicked.connect(self.textedit_1.clear)
self.button_clear.clicked.connect(self.textedit_2.clear)
self.button_clear.clicked.connect(self.email_text.clear)
self.button_clear.clicked.connect(self.telephon_text.clear)
self.button_find.clicked.connect(self.toSeekNomerEmail)
self.button_save.clicked.connect(self.toSaveNomerEmail)
self.button_delete.clicked.connect(self.toDeleteNomerEmail)
def toSeekNomerEmail(self):
PlainText = self.textedit_1.toPlainText()
self.action_options_1 = self.parent.action_search_options_1
self.action_options_2 = self.parent.action_search_options_2
self.action_options_3 = self.parent.action_search_options_3
self.status_1 = self.parent.status_1
if len(PlainText) > 0:
# шаблон для телефонных номеров
inserted_text_1 = re.compile(r'\W?\D?\d\s?\d\d\d\D?\s?\d\d\d\s?-?\d\d\s?-?\d\d')
# шаблок для акк и электронных почт
email_akk = re.compile(r'[a-zA-Z0-9]{1,50}@[a-z]{2,6}\.[a-z]{2,4}')
# собирает данные
self.email_text = email_akk.findall(PlainText)
self.telephon_text = inserted_text_1.findall(PlainText)
text_1 = '' # для телефонных номеов
text_2 = '' # для почт и аккаунтов
# преобразовать в нормальные вид
for nomer in self.telephon_text:
text_1 += nomer + "\n"
for email in self.email_text:
text_2 += email + "\n"
# если в массиве оказались телефонные номера или акк и почты
if len(self.email_text) > 0 or len(self.telephon_text) > 0:
# проверка на установленный режим действия (поиска)
# искать всё (действие)
if self.action_options_1.isChecked() == True:
# проверка на то что будет выводится в тексте
# только телефонные номера
if len(text_1) > 0 and len(text_2) == 0:
self.textedit_2.setText("Телефонные номера:\n" + text_1)
# только почты
elif len(text_1) == 0 and len(text_2) > 0:
self.textedit_2.setText("Электронные почты:\n" + text_2)
# всё вместе
elif len(text_1) > 0 and len(text_2) > 0:
self.textedit_2.setText("Телефонные номера:\n" + text_1\
+ "\nЭлектронные почты:\n" + text_2)
# панель состояние
self.status_1.showMessage("Телефонные номера - " + str(len(self.telephon_text))\
+ "; Электронные почты - " + str(len(self.email_text)), msecs = 3500)
# искать телефонные номера
elif self.action_options_2.isChecked() == True:
# если данные есть
if len(text_1) > 0:
self.textedit_2.setText("Телефонные номера:\n" + text_1)
elif len(text_1) == 0:
self.textedit_2.setText("Данных не обнаружено!")
self.status_1.showMessage("Телефонные номера - " + str(len(self.telephon_text)), msecs = 3500)
# искать аккаунты и почты
elif self.action_options_3.isChecked() == True:
# если оказались данные
if len(text_2) > 0:
self.textedit_2.setText("Электронные почты:\n" + text_2)
elif len(text_2) == 0:
self.textedit_2.setText("Данных не обнаружено!")
self.status_1.showMessage("Найдено: электронные почты и акк - " + str(len(self.email_text)), msecs = 3500)
# если в списке нет номеров
elif len(self.email_text) == 0 and len(self.telephon_text) == 0:
self.textedit_2.setText("Данных не обнаружено!")
# если в первом тексте не обнаруженно данных для поиска
elif len(PlainText) == 0:
self.textedit_2.setText("Введите данные!")
def toSaveNomerEmail(self):
if len(self.email_text) > 0 or len(self.telephon_text) > 0:
# проверка на путь
if os.path.exists("C:/nomera_email") == False:
# созданте папки
os.mkdir('C:/nomera_email')
elif os.path.exists("C:/nomera_email") == True:
# проверка на установленность действия
# поиск всего
if self.action_options_1.isChecked() == True:
telephon_nomer_email = open('C:/nomera_email/Telephonnue_nomera_email.txt', 'a')
# записывается номера и акк, и почты
if len(self.telephon_text) > 0: # проверка на номера
telephon_nomer_email.write("\nТелефонные номера:\n")
for tel_nomer in self.telephon_text:
telephon_nomer_email.write(tel_nomer + "\n")
telephon_nomer_email.write("")
if len(self.email_text) > 0: # проверка на акк или почта
telephon_nomer_email.write("\nАккаунты, электронные почты:\n")
for email in self.email_text:
telephon_nomer_email.write(email + '\n')
telephon_nomer_email.write("")
telephon_nomer_email.close()
# поиск телефонных номеров
elif self.action_options_2.isChecked() == True:
# запись телефонный номеров
if len(self.telephon_text) > 0:
telephon_nomer = open('C:/nomera_email/Telephonnue_nomera.txt', 'a')
telephon_nomer.write("\nТелефонные номера:\n")
for tel_nomer in self.telephon_text:
telephon_nomer.write(tel_nomer + "\n")
telephon_nomer.write("")
telephon_nomer.close()
# поиск почт и аккаунтов
elif self.action_options_3.isChecked() == True:
# запись аккаунтов
if len(self.email_text) > 0:
email_file = open('C:/nomera_email/Email.txt', 'a')
email_file.write("\nАккаунты, электронные почты:\n")
for email in self.email_text:
email_file.write(email + '\n')
email_file.write("")
email_file.close()
# датчик для удаление данных из списков
self.button_clear.clicked.connect(self.telephon_text.clear)
self.button_clear.clicked.connect(self.email_text.clear)
# вывод информации после сохранения
self.textedit_2.setText("Вы сохранили в txt-файл,\nна путь - C:\\nomera_email")
# если данных для сохранения не обнаружено
elif len(self.email_text) == 0 and len(self.telephon_text) == 0:
self.textedit_2.setText("Данных для сохранения в\ntxt-файл не обнаружено!")
def toDeleteNomerEmail(self):
language_russian = self.parent.language_russian
language_english = self.parent.language_english
if os.path.exists("C:\\nomera_email") == True:
shutil.rmtree("C:\\nomera_email")
self.textedit_2.setText("Все данные удалены!")
elif os.path.exists("C:/nomera_email") == False:
self.textedit_2.setText("Не обнаружено данных для удаления!")
# номера и акк для проверки поиска
# щоашгомошвамшто (+5 555) 555 55 55 апрарdfb 89209103333
# ваииапп 342423 пиа 8 888 888 88-88 dfbdfg [email protected]
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
void QTextEdit::clear()
Удаляет весь текст в текстовом редакторе.
...
def clickedActionBack(self):
widget = self.centralWidget.layout().itemAt(0).widget()
self.centralWidget.layout().removeWidget(widget)
widget.hide()
self.widget_main = self.createPage()
self.mainLayout.addWidget(self.widget_main)
# условие для очищений полей при выходе из страничек
if self.action_clear_page.isChecked() == True:
self.window_1.textedit_1.clear() # + ()
self.window_1.textedit_2.clear() # + ()
# --------------->^^
...