Я занимаюсь разработкой приложения с графическим интерфейсом, которое называется поиск дубликатов.Что он делает, так это то, что если пользователь набирает или разбивает на группы несколько имен, он находит, какие имена дублируются, и выводит имена без дублирования и сортирует их в алфавитном порядке.
Теперь я хочу развить это еще дальше, посколькуэта версия была только 0.0.
1) Когда я изменяю размер окна, поля ввода и вывода и кнопки застревают в одинаковом положении с одинаковым размером.Я хочу, чтобы они изменяли размеры и перемещали в зависимости от размера окна.
2) Я хочу, чтобы текст заполнителя был больше и выровнен по центру текстового поля.
3) МойФункция closeEvent не работает.Я хочу спросить пользователя, действительно ли он хочет выйти.
4) Наконец, я не могу получить подменю в работе с файловым меню.«Новый» должен очистить весь текст в полях (ввод и вывод), в основном перезапустить приложение.и кнопка выхода в меню «Файл» должна задать тот же вопрос из номера 3.
Я много пытался исследовать, но это единственные вопросы, которые мне не удалось выяснить.
import sys
import re
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QMessageBox
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("Duplication Finder")
MainWindow.resize(919, 728)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.Enter_button = QtWidgets.QPushButton(self.centralwidget)
self.Enter_button.setGeometry(QtCore.QRect(380, 330, 151, 51))
self.Enter_button.setObjectName("Enter_button")
self.Text_box = QtWidgets.QTextEdit(self.centralwidget, placeholderText="Please insert Text")
self.Text_box.setGeometry(QtCore.QRect(20, 30, 881, 271))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.Text_box.setFont(font)
self.Text_box.setObjectName("Text_box")
self.Result_box = QtWidgets.QTextEdit(self.centralwidget)
self.Result_box.setGeometry(QtCore.QRect(20, 410, 881, 271))
self.Result_box.setObjectName("Result_box")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 919, 21))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
self.menuEdit = QtWidgets.QMenu(self.menubar)
self.menuEdit.setObjectName("menuEdit")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionNew = QtWidgets.QAction(MainWindow)
self.actionNew.setObjectName("actionNew")
self.actionExit = QtWidgets.QAction(MainWindow)
self.actionExit.setObjectName("actionExit")
self.menu.addAction(self.actionNew)
self.menu.addAction(self.actionExit)
self.menubar.addAction(self.menu.menuAction())
self.menubar.addAction(self.menuEdit.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Duplication Finder v0.0"))
self.Enter_button.setText(_translate("MainWindow", "Type"))
self.menu.setTitle(_translate("MainWindow", "File"))
self.menuEdit.setTitle(_translate("MainWindow", "Edit"))
self.actionNew.setText(_translate("MainWindow", "New"))
self.actionExit.setText(_translate("MainWindow", "Exit"))
def closeEvent(self, QCloseEvent):
ans = QMessageBox.question(self, "Exit", "Do you want to Exit?",
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if ans == QMessageBox.Yes:
QCloseEvent.accept()
else:
QCloseEvent.ignore()
class MyApp(Ui_MainWindow):
def __init__(self, dialog):
Ui_MainWindow.__init__(self)
self.setupUi(dialog)
self.Enter_button.clicked.connect(self.duplication)
def duplication(self):
text = self.Text_box.toPlainText()
text = re.split(", |-| |,", text) # split based on the delimeter in the argument.
text = [s.strip() for s in text] # remove all the leading spaces in each elements of the list
name = list(filter(None, text)) # drop all the empty elements and put them in a list
i = 0
names = []
remove = []
# go through all the elements in the list and see if they are duplicated.
while i < len(name):
each_name = name[i].strip()
if each_name.startswith(("*", "-")):
continue # straight to next line
if each_name not in names:
names.append(each_name)
elif each_name in names:
remove.append(each_name)
i += 1
# sort the list and send "무명' to the very end.
sort_names = sorted(names, key=lambda x: (x.startswith("무명"), x))
sort_names = ", ".join(sort_names)
output_string = f'\n\nDuplication: {(sorted(remove))}\n\nTotal of {len(remove)}duplications are are removed, Total of {len(names)}people are printed.\n\n {sort_names}'
self.Result_box.setText(output_string)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
dialog = QMainWindow()
prog = MyApp(dialog)
dialog.show()
sys.exit(app.exec_())