Передача переменной (идентификатора) в другой скомпилированный пользовательский интерфейс в pyqt - PullRequest
0 голосов
/ 03 марта 2011

Более часа я был озадачен тем, как передать переменную, в частности идентификатор в sqlite, к которому недавно обращались, для использования в другом сгенерированном пользовательском интерфейсе.Я использую eric4 (с python, pyqt, qtdesigner и sqlite).

В основном программа, которую я кодирую, делает членов, и каждый член имеет уникальный идентификатор, когда генерируется информация об участнике.Когда создается новый участник, идентификатор, назначенный новому участнику, должен быть передан другой части программы.Но есть также случаи, когда должны быть внесены изменения в член, идентификатор должен быть известен для отображения правильной информации участника.

Обычно, когда добавляется новый член, он сначала вводит информацию в базу данных.Что я сделал, так это в диалоговом коде этого пользовательского интерфейса с именем newmember.py:

def on_button_Save_released(self):
    Nik = unicode(self.LineEdit_Nickname.text())
    self.NMem = NewMem()
    self.NMem.input_data(Nik)
    self.close()

NewMem - это класс в другом py-файле, который имеет доступ к базе данных.Части метода input_data выглядят так:

    cur.execute("insert into Members (Nick) values (?)",(Nik))

Я добавил этот код, чтобы он знал, какому ID назначен новый член: *

    CurrentID = cur.lastrowid
    return CurrentID

Итак, я изменил эту строкуself.NMem.input_data(Nik) в коде интерфейса пользователя newmember.py в этот

    ID = self.NMem.input_data(Nik)

, чтобы идентификатор был передан.

Теперь код диалога откроет другое окно, и я хочу вернутьID будет использоваться для другого интерфейса.В целом весь метод в коде диалогового окна пользовательского интерфейса в newmember.py до сих пор таков:

def on_button_Save_released(self):
    Nik = unicode(self.LineEdit_Nickname.text())
    self.NMem = NewMem()
    ID = self.NMem.input_data(Nik)
    self.close()

    self.Pts = Points()
    self.Pts.show()

Points() - это класс в другом коде пользовательского интерфейса, который будет отображать в пользовательском интерфейсе Points информациючлена.Но возвращенная информация ID должна быть передана в пользовательский интерфейс Points(), чтобы отображалась правильная информация.У меня есть предчувствие, что мне понадобится изменить некоторые части в скомпилированной форме пользовательского интерфейса, чтобы она знала, что ID будет отображаться, но как мне передать ее в скомпилированную форму пользовательского интерфейса?

Любая помощьочень ценится глубоко кланяется

Редактировать: Есть ли способ в этом коде -

    self.Pts = Points()
    self.Pts.show()

быть включенным в идентификатор переменной ипройдет в пользовательский интерфейс?Например,

    self.Pts = Points
    self.Pts.show(ID)

, что идентификатор будет также поступать в интерфейс?

Edit2: Есть ли способ передачи переменных в классах пользовательского интерфейса в python, как это было показано здесь - http://www.daniweb.com/forums/thread64758.html

1 Ответ

0 голосов
/ 05 июня 2014

Я считаю, что использование модели Qt с QDataWidgetMapper - это способ решения этой проблемы. Пример здесь .(QSLTableModel или подкласс QAbstractTableModel, если вы хотите самостоятельно запрограммировать связь с базой данных).

Вы также можете проверить пример сопоставителя виджетов SQL в документации Qt.

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

...