Найти - Пользователи
Полная версия: PyQt4 окно авторизации
Начало » GUI » PyQt4 окно авторизации
1
tiglon
Необходимо окно авторизации в бд, сейчас сделал так, но мне кажется не очень решение.
Есть варианты лучше?)

from PyQt4 import QtCore, QtGui, QtSql
import sys
import xml.etree.ElementTree as ET
class LoginWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        
        self.lineEditName = QtGui.QLineEdit()
        self.lineEditDbase = QtGui.QLineEdit()
        self.lineEditPass = QtGui.QLineEdit()
        self.lineEditIp = QtGui.QLineEdit()
        self.lineEditPass.setEchoMode(2)
        
        self.buttonOk = QtGui.QPushButton("Вход")
        self.buttonCancel = QtGui.QPushButton("Отмена")
        self.buttonOk.clicked.connect(self.on_Ok)
        self.buttonCancel.clicked.connect(self.close)
        self.hbox = QtGui.QHBoxLayout()
        self.hbox.addWidget(self.buttonOk)
        self.hbox.addWidget(self.buttonCancel)
        self.form =QtGui.QFormLayout()
        self.form.addRow("Логин:", self.lineEditName)
        self.form.addRow("Пароль:", self.lineEditPass)
        self.form.addRow("БД:", self.lineEditDbase)
        self.form.addRow("Ip:", self.lineEditIp)
        self.form.addRow(self.hbox)
        self.setLayout(self.form)
        self.lineEditPass.setFocus()
    def on_Ok(self):
 #Вот тут проверяется коннект, и если db.open создается основное окно.
        self.hide()
        self.window = MyWindow()
        self.window.resize(1100, 700)
        self.window.show()
class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None, dbconnect=None):
        QtGui.QWidget.__init__(self, parent)
        self.filename  = ""
        self.vbox = QtGui.QVBoxLayout()
        self.groupBox = QtGui.QGroupBox(self)
        self.h1box = QtGui.QHBoxLayout()
        self.butOpen = QtGui.QPushButton("Открыть")
        self.butOpen.clicked.connect(self.on_butOpen)
        self.butAdd = QtGui.QPushButton("Добавить")
        self.butAdd.clicked.connect(self.on_butAdd)
        
        self.h1box.addWidget(self.butOpen, alignment = QtCore.Qt.AlignLeft) 
        self.h1box.addWidget(self.butAdd, alignment = QtCore.Qt.AlignLeft)
        self.h1box.addStretch()
        self.groupBox.setLayout(self.h1box)
        self.vbox.addWidget(self.groupBox, alignment = QtCore.Qt.AlignTop)
        self.groupBox2 = QtGui.QGroupBox(self)
        self.h2box = QtGui.QHBoxLayout()
        self.textError = QtGui.QTextEdit()
        self.h2box.addWidget(self.textError)
        self.groupBox2.setLayout(self.h2box)
        self.vbox.addWidget(self.groupBox2, stretch=1)        
        self.setLayout(self.vbox)
    def on_butOpen(self):
        self.butAdd.setEnabled(False)
        dialog = QtGui.QFileDialog(parent=self,
                                   filter="Xml файлы(*.xml)",
                                   caption="Где этот файл?")
        dialog.setAcceptMode(QtGui.QFileDialog.AcceptOpen)
        result = dialog.exec_()
        if result == QtGui.QDialog.Accepted:
            self.filename  = str(dialog.selectedFiles()[0])
            self.groupBox2.setTitle(self.filename)
            self.butAdd.setEnabled(True)
    def on_butAdd(self):
        self.textError.clear()
        totalNumber =[]
        totalRecords = 0
        
        #self.tree = ET.parse(self.filename) #
        #self.root = self.tree.getroot()
"""
        for value in self.root.findall("tp"):
            mobile = value.get("n")
            if mobile not in totalNumber:
                totalNumber.append(mobile)
            for ss in value.findall('ss'):
                totalRecords += 1
                sd, ed, n, a = self.changeDate(ss.get("sd")), self.changeDate(ss.get("ed")), ss.get("n"), ss.get("a")
        self.textError.append("Добавлено %d записей, уникальный номеров %d"%(totalRecords, len(totalNumber)))
        self.textError.append("".join(x + '\n'for x in totalNumber))
        self.root.clear()
"""
app = QtGui.QApplication(sys.argv)
win = LoginWindow()
win.show()              
sys.exit(app.exec_())
reclosedev
Лучше - не лучше, не знаю. Но расскажу как бы сделал я.
Вместо кода для создания окон и кнопок - Qt Designer.

QDialog вместо QWidget для LoginWindow.

self.lineEditPass.setEchoMode(2)
Что значит “2”? Наверное QtGui.QLineEdit.Password

Является ли открытие главного окна обязанностью диалога ввода пароля? Что если в будущем потребуется возможность перезайти под другими данными?

Получить файл для открытия: QtGui.QFileDialog.getOpenFileName

Для логина вот так лучше:
http://stackoverflow.com/a/11812578/1052325
tiglon
Рассматривается случай единичного подключения, под другими данными перезайти не понадобиться.
В Designere мне показалось разобраться сложнее чем в коде.)

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB