2016-10-28 7 views
0

После ввода 1, как для входа в систему, так и для пароля, должно появиться новое окно, но оно дает ошибку.Как исправить ошибку в моей программе pyqt (первый аргумент несвязанного метода должен иметь тип «QDialog»)?

Он работал нормально, прежде чем внес некоторые изменения в код, и я не знаю, что именно вызывает его.

# -*- coding: utf-8 -*- 
from PyQt4 import QtGui, QtCore 
import sys 

app = QtGui.QApplication(sys.argv) 
login = QtGui.QDialog() 

login.setWindowTitle('login') 
login.resize(100, 100) 

login_form = QtGui.QFormLayout() 

row1 = QtGui.QHBoxLayout() 
user_input = QtGui.QLineEdit() 
row1.addWidget(user_input) 
login_form.addRow('user', row1) 
row2 = QtGui.QHBoxLayout() 
pwd_input = QtGui.QLineEdit() 
row2.addWidget(pwd_input) 
login_form.addRow('pwd', row2) 
row3 = QtGui.QHBoxLayout() 
login_btn = QtGui.QPushButton('LOGIN') 
exit_btn = QtGui.QPushButton('EXIT') 
row3.addWidget(login_btn) 
row3.addWidget(exit_btn) 
login_form.addRow(row3) 

login.setLayout(login_form) 

def handleLogin(): 
    if (user_input.text() == '1' and 
     pwd_input.text() == '1'): 
     QtGui.QDialog.accept() 
    else: 
     QtGui.QMessageBox.warning(login, 'Error', 'Bad user or password', 
           buttons = QtGui.QMessageBox.Close, 
           defaultButton = QtGui.QMessageBox.Close) 
QtCore.QObject.connect(login_btn, QtCore.SIGNAL('clicked()'), handleLogin) 

if login.exec_() == QtGui.QDialog.Accepted: 
    window = QtGui.QWidget() 
    window.show() 
    sys.exit(app.exec_()) 

ответ

1

Ошибка возникает из-за того, что вы пытаетесь вызвать метод через класс, а не экземпляр. Попробуйте это вместо:

def handleLogin(): 
    if (user_input.text() == '1' and pwd_input.text() == '1'): 
     login.accept()