Форум сайта python.su
Добрый день!
Возникла такая проблема. Есть авторизации:
#-*-coding: utf-8 -*- from PyQt4 import QtCore, QtGui, QtSql import sys import kinterbasdb ########################################################################### Окно авторизации class LoginWindow(QtGui.QWidget): def __init__(self, parent = None): super(LoginWindow, self).__init__() QtGui.QWidget.__init__(self, parent) self.setWindowTitle('logwind') self.lineEditName = QtGui.QLineEdit() self.lineEditDbase = QtGui.QLineEdit() self.lineEditPass = QtGui.QLineEdit() self.lineEditIp = QtGui.QLineEdit() self.lineEditPass.setEchoMode(2) self.buttonOk = QtGui.QPushButton("Ok") self.hbox = QtGui.QHBoxLayout() self.hbox.addWidget(self.buttonOk) self.form =QtGui.QFormLayout() self.form.addRow("Login:", self.lineEditName) self.form.addRow("Pass:", self.lineEditPass) self.form.addRow("BD:", self.lineEditDbase) self.form.addRow("Ip:", self.lineEditIp) self.form.addRow(self.hbox) self.setLayout(self.form) self.lineEditPass.setFocus() #Подтверждения ввода идентификационных данных. self.buttonOk.clicked.connect(self.on_Ok) def on_Ok(self): BDUSER = "sysdba" #str(self.lineEditName. text()) BDPASSWORD = "*****" #str(self.lineEditPass. text()) host = "192.168.1.88:E:\BD\BD1.FDB" #Подключение к БД и проверка try: con = kinterbasdb.connect(dsn=host,user=BDUSER,password=BDPASSWORD) cu = con.cursor() except kinterbasdb.DatabaseError: print "connect is not Ok!" else: self.hide() self.window = MainWindow() self.window.show()
########################################################################### Главное окно class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setWindowTitle("mainwind") self.resize(1550, 850) self.windowMenu() def windowMenu(self): ButNew = QtGui.QAction('New', self) self.connect(ButNew, QtCore.SIGNAL('triggered()'), (self.on_new)) ButOpen = QtGui.QAction('Open', self) self.connect(ButOpen, QtCore.SIGNAL('triggered()'), (self.on_open)) menubar = self.menuBar() PersMenu = menubar.addMenu('Personal') PersMenu.addAction(ButNew) PersMenu.addAction(ButOpen) def on_new(self): win = WindowNew(self) win.show() print cu def on_open(self): win = WindowOpen(self) win.show()
Отредактировано Cheryrg (Ноя. 22, 2014 15:12:37)
Офлайн
Cheryrgвам надо в mainwindow вставить LoginWindow?
Как передать cu главному окну и далее
super(LoginWindow, self).__init__() QtGui.QWidget.__init__(self, parent)
Отредактировано vrabey (Ноя. 22, 2014 17:01:52)
Офлайн
Нет, нужно что бы class MainWindow наследовал все переменные класса LoginWindow. В частности курсор. Сей час при обращении к курсору из MainWindow, пишет что это неизвестная переменная.
Офлайн
Или хотя бы как передать переменную из класса в класс. 3й день уже не могу из за этого двинутся дальше
Офлайн
# -*- coding: utf-8 -*- class A(object): def __init__(self): self.x = 'I\'m "x"' def foo(self, arg): y = arg # локальная переменная, за пределами foo не видна, как и ваша cu self.z = arg # а эта будет видна, ибо привязана к self class B(A): def __init__(self): super(B, self).__init__() print self.x def foo2(self): self.foo('argument') print self.z print y # ошибка, хз что за y b = B() b.foo2()
Офлайн
Cheryrg
Нет, нужно что бы class MainWindow наследовал все переменные класса LoginWindow.
>>> class A: ... i = 1 ... >>> class B: ... j = 2 ... >>> class C(A, B): ... k = 3 ... >>> c = C() >>> c.i, c.j, c.k (1, 2, 3) >>>
CheryrgЕсли нужно передавать внутреннюю переменную, нужно сделать соответствующие методы.
Или хотя бы как передать переменную из класса в класс.
Отредактировано py.user.next (Ноя. 24, 2014 00:00:01)
Офлайн
Спасибо. Хотелось все таки через наследование сделать. То есть в моем случае должно быть:
def on_Ok(self): BDUSER = "sysdba" #str(self.lineEditName. text()) BDPASSWORD = "*****" #str(self.lineEditPass. text()) host = "192.168.1.88:E:\BD\BD1.FDB" #Подключение к БД и проверка try: con = kinterbasdb.connect(dsn=host,user=BDUSER,password=BDPASSWORD) self.cu = con.cursor()
class MainWindow(QtGui.QMainWindow, LoginWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setWindowTitle("mainwind") self.resize(1550, 850) self.windowMenu()
Офлайн