Portál AbcLinuxu, 19. dubna 2024 23:46


Dotaz: Spuštění widgetu z hlavního okna

12.9.2008 00:20 pifko
Spuštění widgetu z hlavního okna
Přečteno: 236×
Odpovědět | Admin
Zdravím,

S qt4 si hraju celkem krátce, ale nikde nemůžu příjít na následující. V QtDesigneru si udělám hlavní okno (MainWindow). V něm mi vše funguje jak má. Pak si vytvořím Widget (formulář), ten si naimportuju do hlavního programu, ale už nevím, jak ho z MainWindow mám spustit (zobrazit). Omlouvám se za tenhle asi stupidní dotaz, ale nikde to nemůžu nalézt. Díky

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

Odpovědi

bazil avatar 12.9.2008 01:02 bazil | skóre: 33 | blog: sluje | Miroslav
Rozbalit Rozbalit vše Re: Spuštění widgetu z hlavního okna
Odpovědět | | Sbalit | Link | Blokovat | Admin
mno možná by bylo super uvést, o jaký programovací jazyk se jedná ... na c++ jsem schopen určitě odpovědět a možná i na python a pyqt4 ...
12.9.2008 01:06 dfsfsfs
Rozbalit Rozbalit vše Re: Spuštění widgetu z hlavního okna
Odpovědět | | Sbalit | Link | Blokovat | Admin
Moc nerozumim otazce, snad jde o umistovani widgetu do layoutu? Layout Classes
Fuky avatar 12.9.2008 03:12 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Spuštění widgetu z hlavního okna
Odpovědět | | Sbalit | Link | Blokovat | Admin

Chtělo by to více přiblížit co vlastně chceš. Příklad jak to přibližně máš. Máš definici window.ui a form.ui. Ve fci main() voláš zobrazení window a zároveň chceš zobrazit i form. Ten zobrazíš stejně jako window:

    QWidget *form_widget = new QWidget;
    Ui_Form form_ui;
    form_ui.setupUi(form_widget);

    form_widget->show();

Nebo ho chceš zobrazit kliknutím na tlačítko ve window? Pak opět použiješ předchozí kód, jen ho vložíš do fce, která se zavolá po kliknutí na tlačítko. (Signals and Slots)

-- RÁMO: psí tábor , ETriatlon: Výuka plavání
12.9.2008 10:26 pifko
Rozbalit Rozbalit vše Re: Spuštění widgetu z hlavního okna
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ááá, omlouvám se. Psal sem to pozdě v noci a byl sem trochu unaven. Jedná se o python. Trochu blíže to popíšu. Qt designeru si vytvořím hlavní okno. Teď nemám po ruce můj kód, ale dejme tomu že by to bylo něco takového (stáhnuto z netu):
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created: Wed Dec 05 14:22:22 2007
#      by: PyQt4 UI code generator 4.3.1
#
# WARNING! All changes made in this file will be lost!

import sys,urllib
from PyQt4 import QtCore, QtGui
data = urllib.urlopen("http://www.google.com/")
yazdir = data.read()

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(QtCore.QSize(QtCore.QRect(0,0,640,800).size()).expandedTo(MainWindow.minimumSizeHint()))

        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.textBrowser = QtGui.QTextBrowser(self.centralwidget)
        self.textBrowser.setGeometry(QtCore.QRect(0,0,640,800))
        self.textBrowser.setObjectName("textBrowser")
        self.textBrowser.setOpenExternalLinks(True)
        MainWindow.setCentralWidget(self.centralwidget)

        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0,0,623,21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Tarayıcı", None, QtGui.QApplication.UnicodeUTF8))
        self.textBrowser.setHtml(yazdir)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
A já bych potřeboval, aby po stisknutí tlačítka (které v tomhle příkladě není) se zobrazil další formulář (který si opět vytvořím v qt designeru). Ten vypadá třeba takhle (opět příklad):
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'f_chat2.ui'
#
# Created: Mon Apr 28 10:29:07 2008
#      by: PyQt4 UI code generator 4.3.3
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import * 
from PyQt4.QtGui import *  

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(QtCore.QSize(QtCore.QRect(0,0,478,395).size()).expandedTo(Form.minimumSizeHint()))

        self.button_envoyer = QtGui.QPushButton(Form)
        self.button_envoyer.setGeometry(QtCore.QRect(350,310,101,31))
        self.button_envoyer.setObjectName("button_envoyer")

        self.txt = QtGui.QLineEdit(Form)
        self.txt.setGeometry(QtCore.QRect(20,310,321,31))
        self.txt.setObjectName("txt")

        self.fenetre = QtGui.QTextEdit(Form)
        self.fenetre.setGeometry(QtCore.QRect(20,30,321,261))
        self.fenetre.setObjectName("fenetre")

        self.retranslateUi(Form)
        QtCore.QObject.connect(self.button_envoyer,QtCore.SIGNAL("clicked()"),self.copier_txt)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
        self.button_envoyer.setText(QtGui.QApplication.translate("Form", "envoyer", None, QtGui.QApplication.UnicodeUTF8))

    def copier_txt(self): 
        ch = self.txt.text() 
        ch = unicode(ch, 'UTF-8') 
        self.fenetre.setText("C>")
        self.fenetre.append(QString(ch)) 
        self.txt.clear()  
V tomhle formuláři bych potřeboval vybrat položku ze seznamu a tu pak předat při návratu zpět do hlavního okna (ale s tim už se poperu). Teď mi jde o to zobrazení formuláře. Díky
Fuky avatar 12.9.2008 10:42 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Spuštění widgetu z hlavního okna
No teď už je nám jasné co potřebuješ. Asi jsi si nevšiml řešení nebo na něm něčemu nerozumíš?
12.9.2008 10:49 pifko
Rozbalit Rozbalit vše Re: Spuštění widgetu z hlavního okna
Ha. Máš pravdu, přečetl sem si jen první dvě odpovědi. Díky moc, doma to vyzkouším a dám vědět.
Fuky avatar 12.9.2008 13:00 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Spuštění widgetu z hlavního okna

Možná se Ti bude hodit příklad:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from ui_window import *
from ui_form import *

class Window(QMainWindow, Ui_MainWindow):
    def __init__(self, form):
        QMainWindow.__init__(self)

        self.setupUi(self)
        self.connect(self.pushButton, SIGNAL("clicked()"), form.show)

if __name__ == "__main__":
    app = QApplication(sys.argv)

    form = QWidget()
    form_ui = Ui_Form()
    form_ui.setupUi(form)

    window = Window(form)
    window.show()

    sys.exit(app.exec_())

12.9.2008 14:35 pifko
Rozbalit Rozbalit vše Re: Spuštění widgetu z hlavního okna
Naprostá paráda. Tisíceré díky

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.