Вылетает окно PyQT5 при попытке подтвердить ввод
Пытаюсь создать окно, в которое будет вводится имя пользователя (в дальнейшем по этому имени будет создаваться текстовый файл), но по нажатию на "Ок" закрывается даже главное окно (функция CreateNewUser)
from PyQt5 import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
import os
class FirstWindow(QMainWindow):
def __init__(self):
super().__init__()
self.title = "Working time"
self.left = 200
self.top = 200
self.width = 400
self.height = 400
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
#--------Меню программы
#Менюшка с кнопкой выхода из приложения
#--------
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu2 = menubar.addMenu('&Users')
#Exit
exitAction = QAction(QIcon('./images/web.png'), '&File', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit Application')
exitAction.triggered.connect(qApp.exit)
#List of users
usersAction = QAction(QIcon('./images/web.png'), '&UserList', self)
usersAction.setShortcut('Ctrl+U')
usersAction.triggered.connect(self.getUsersList)
#CreateUser
CreateUser = QAction('&CreateNew', self)
CreateUser.setShortcut('Ctrl+n')
CreateUser.triggered.connect(self.CreateNewUser)
fileMenu.addAction(exitAction)
fileMenu2.addAction(usersAction)
fileMenu2.addAction(CreateUser)
self.show()
def getUsersList(self):
tmpList = os.listdir()
UsersList = []
for item in tmpList:
if item[-3:] == 'txt':
UsersList.append(item)
print(UsersList)
def CreateNewUser(self):
self.le = QLineEdit(self)
self.le.move(70, 70)
self.setWindowTitle("Create new user")
self.button = QPushButton("show", self)
text, ok = QInputDialog.getText(self, 'InputDialog', 'Enter new name: ')
self.show()
if ok:
self.le.setText(str(text))
NewName = self.le.getText()
f = open(NewName, 'w')
f.close()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
print('window closed')
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FirstWindow()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
QLineEdit не имеет атрибута 'getText'. Вы видимо хотели использовать text(), если вам надо прочитать текст из QLineEdit, но мне кажется, что эта строка лишняя.
Я внес некоторые изменения в ваш код, теперь он работает. Обратите внимание на строки, в которые внесены изменения - они помечены.
import sys
import os
#from PyQt5 import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class FirstWindow(QMainWindow):
def __init__(self):
super().__init__()
self.title = "Working time"
self.left = 200
self.top = 200
self.width = 400
self.height = 400
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
#--------Меню программы
#Менюшка с кнопкой выхода из приложения
#--------
self.statusBar()
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu2 = menubar.addMenu('&Users')
#Exit
exitAction = QAction(QIcon('./images/web.png'), '&File', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit Application')
exitAction.triggered.connect(qApp.exit)
#List of users
usersAction = QAction(QIcon('./images/web.png'), '&UserList', self)
usersAction.setShortcut('Ctrl+U')
usersAction.triggered.connect(self.getUsersList)
#CreateUser
CreateUser = QAction('&CreateNew', self)
CreateUser.setShortcut('Ctrl+n')
CreateUser.triggered.connect(self.CreateNewUser)
fileMenu.addAction(exitAction)
fileMenu2.addAction(usersAction)
fileMenu2.addAction(CreateUser)
# self.show()
def getUsersList(self):
tmpList = os.listdir()
UsersList = []
for item in tmpList:
if item[-3:] == 'txt':
UsersList.append(item)
print(UsersList)
def CreateNewUser(self):
self.le = QLineEdit(self)
self.le.move(70, 70)
self.setWindowTitle("Create new user")
self.button = QPushButton("show", self)
text, ok = QInputDialog.getText(self, 'InputDialog', 'Enter new name: ')
# self.show()
print(text, ok)
# if ok:
if text: # +++
self.le.setText(text) # (str(text))
# NewName = self.le.getText()
NewName = self.le.text() # +++ ??? NewName
# f = open(NewName, 'w')
# f.close()
with open('{}.txt'.format(text), 'w') as f: # +++ + .txt
pass
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
print('window closed')
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FirstWindow()
ex.show() # +++
sys.exit(app.exec_())
