Найти - Пользователи
Полная версия: Доступ из стороннего класса в класс формы PyQT4
Начало » GUI » Доступ из стороннего класса в класс формы PyQT4
1
Landing
Есть класс (Excel), ранее написанный, теперь хочу к нему гуи приделать. Возникла необходимость из этого стороннего класса получать доступ к виджетам, как сделать?
В частности добавлять данные в listWidget.

class Excel(QtGui.QDialog):
def __init__(self, path, parent=None):
QtGui.QDialog.__init__(self, parent)

self._path = path
self._xl = win32com.client.Dispatch("Excel.Application")
....


class Window(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
uic.loadUi("form.ui", self)



if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.exec_()
poltergeist
После uic.loadUi(“form.ui”, self) все виджеты ui-файла доступны по своему objectName в этом же классе. objectName задаётся в Designer-е для всех объектов.
Landing
Можно подробнее? Нужно из класса Window получить доступ к методам в классе Excel и наоборот из Excel получить доступ к виджетам в Window. Пытаюсь делать так:

 
import sys
from PyQt4 import QtCore, QtGui, uic


class Test():
def __init__(self):
self.w = Window()

def test(self):
self.w.list1.addItem("dff")


class Window(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
uic.loadUi("form.ui", self)

self.t = Test()


@QtCore.pyqtSignature("")
def on_bt1_clicked(self):
self.t.test()


if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.exec_()
Происходит зацикливание обращений из класса в класс… Что делать?
poltergeist
Можно и так наверное сделать, но это не идеальный способ:
import sys
from PyQt4 import QtCore, QtGui, uic


class Test():
def __init__(self, parent):
self.w = parent

def test(self):
self.w.list1.addItem("dff")


class Window(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
uic.loadUi("form.ui", self)

self.t = Test(self)


@QtCore.pyqtSignature("")
def on_bt1_clicked(self):
self.t.test()


if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.exec_()
Лучше всего конечно связать эти два класса сигналами, чтобы не делать циклических ссылок друг на друга, как в примере… Но для мелких задач и такое сойдёт.
Landing
Можно пример, как связать сигналами?
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