Portál AbcLinuxu, 8. května 2025 13:23

Dotaz: Python OOP QT, QTabWidget - dynamická tvorba tabů

14.6.2013 18:49 patrikpb
Python OOP QT, QTabWidget - dynamická tvorba tabů
Přečteno: 401×
Odpovědět | Admin
Zdravím! Nevěděl jsem jak ve zkratce popsat překážku, kterou řeším. Zkouším v pythonu napsat jednoduché GUI pro NetworkManager. Mám myšlenku, jednoduchého okna, ve kterém bude QTabWidget a na každém tabu bude nastavení jednoho interface (wlan,eth,...) plus pár dalších. Chtěl bych udělat tvorbu těchto tabů závislou na zařízeních, která jsou ve stroji dostupná. Mohu zjistit, jaká zařízení jsou dostupná, ale jsou to jen hodnoty typu string nebo obdobné.

Měl jsem asi takovouto představu
ifaces=["wlan0","wlan1","eth0"]#seznam síťových zařízení
for I in ifaces:
    I=MujWidget()
    #a nasledovalo by pridani instance widgetu jako noveho tabu
Je to jen nástin co od části kódu chci a vím, že nemůže fungovat. Potřebuji nějakým způsobem vytvořil pro každý řetězec jednu instanci widgetu. Má někdo nápad, příklad kódu nebo jiný způsob jak řešit tuto situaci?

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

pavlix avatar 14.6.2013 19:14 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Python OOP QT, QTabWidget - dynamická tvorba tabů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možností je spousta. Každopádně nepoužívej proměnou, která slouží k procházení cyklu k ničemu jinému. Widget bude muset vědět, ke kterému interface se vztahuje. Python je na tyhle hříčky docela dobře uzpůsobený.
for iface in ifaces:
    widget = MujWidget(iface);
    # další práce s widgetem
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
14.6.2013 19:42 patrikpb
Rozbalit Rozbalit vše Re: Python OOP QT, QTabWidget - dynamická tvorba tabů
Díky, dělá to přesně co jsem v textu chtěl. Jde potom ještě přistupovat jednotlivě k takto vytvořeným widgetům? Nemám tušení jak třeba přistupovat k předposlednímu widgetu, který byl v cyklu vytvořen.
pavlix avatar 14.6.2013 20:11 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Python OOP QT, QTabWidget - dynamická tvorba tabů
Buď přes ten tabbed widget, který je zcela jistě zná, nebo si je můžeš někam uložit, třeba do seznamu nebo slovníku, podle toho, jestli k nim chceš přistupovat podle pořadí nebo podle názvu.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
14.6.2013 20:35 patrikpb
Rozbalit Rozbalit vše Re: Python OOP QT, QTabWidget - dynamická tvorba tabů
Wow, tak python zase jednou překonal má očekávání. Moc díky za rady, slovník bude to pravé. Vyřešeno :-)
pavlix avatar 14.6.2013 20:41 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Python OOP QT, QTabWidget - dynamická tvorba tabů
Jinak s GUI pro NetworkManager si hraje hromada lidí, takže by možná stálo za to spojit síly, pokud chceš dělat něco, co se bude fakt používat.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
14.6.2013 21:12 patrikpb
Rozbalit Rozbalit vše Re: Python OOP QT, QTabWidget - dynamická tvorba tabů
Klidně bych s někým spojil síly, jen toho neumím zase tolik a nemám tušení kde hledat takové lidi. Chtěl jsem vytvořit něco nezávislého na DE a využívajícího Qt. V Razor-Qt mi tento nástroj schází.

Sotva jsem překonal jeden problém, mám další :D. Teď řeším jak pro všechny wifi taby udělat jeden template widgetů abych nemusel všechny widgety definovat znova a znova. Tvorba vlastního widgetu není zase taková hračka jak koukám...
pavlix avatar 14.6.2013 21:38 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Python OOP QT, QTabWidget - dynamická tvorba tabů
Vím o někom, kdo má okolo Qt projektů docela přehled:

https://fedoraproject.org/wiki/JaroslavReznik

Jinak se určitě někdy stav na IRC freenode #nm.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
19.6.2013 10:53 Radek Novacek | skóre: 3
Rozbalit Rozbalit vše Re: Python OOP QT, QTabWidget - dynamická tvorba tabů
Tvorba vlastního widgetu je celkem jednoduchá, stačí podědit QWidget
class MyWidget(QtGui.QWidget):
    def __init__(self, name, parent=None):
        QtGui.QWidget.__init__(self, parent)
        # Vytvoreni obsahu widgetu
        label = QtGui.QLabel(name, parent)
        # Vytvoreni layoutu
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(label)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.