Początki z pythonem. Plus biblioteka Qt.

0

Pierwszy post tutaj więc witam.

Po nieudanej przygodzie z c/c++ zaczynam od początku z pythonem i nie chciałbym tym razem zniechęcić się już na samym początku chociaż to chyba była wina mojego podejścia do tej nauki, otoż przeczytałem http://pl.wikipedia.org/wiki/J%C4%99zyk_ANSI_C (c) i przy drugim podejściu nawet zrozumiałem wszystko poza tym ostatnim przykładem (coś o rezerwacji pamięci). Następnie zabrałem się za coś o c++ ale takie czytanie o tych właściwościach języka i niskopoziomowych bibliotekach po prostu mnie usypia, ponadto samodzielna nauka takiego rozbudowanego języka jakim jest c++ jest dość trudna a niestety te książki są tak pisane, że autorzy wymienają wszystko ze standardu 'jak leci' tak jakby sami nigdy nic nie napisali. Gdyby na marginesie było napisane tego się musisz nauczyć a ta funkcjonalność istnieje ale korzysta z niej może 5 ludzi na świecie i małem takie odczucie że tak czytać mogę w nieskończoność i nic z tym informacjami nie będę w stanie zrobić ale mniejsza z tym.

Teraz przechodząc do meritum chciałem tym razem zacząć od czegoś bardziej konkretnego wiec do samego pythona zainteresowałem się biblioteką Qt i jak na razie przejrzałem kilka stron aby mieć taki bardzo, bardzo ogólny obraz i nasuwają się pytania:

a) Czy tutaj http://docs.python.org/2/tutorial/ jest wszystko co muszę wiedzieć o tym języku? Podstawy składni ogarnąłem mniej więcej z tego (całkiem przyjemne wprowadzenie).
b) Mam również zamiar obejrzeć to (PySide) , ktoś się z tego uczył i co najważniejsze czegokolwiek nauczył?
c) Które api jest 'lepsze' PySide czy PyQt?
d) Tutaj już bardzo konkretny problem przesiedziałem nad tym pół soboty aby to zrozumieć.

import sys
from PySide import QtGui, QtCore

def printChildren(obj, indent):
	children = obj.children()
	if children==None:
		return
	for item in children:
		try:
			print indent, item.objectName(), item.metaObject(), item.__class__
			printChildren(item, indent+'  ')
			if item.objectName()=='line':
				item.setText('test')
		except AttributeError:
			print 'Not supported'

class MainWindow(QtGui.QMainWindow):
	def __init__(self):
		super(MainWindow, self).__init__()
		self.setObjectName('mainwindow')
		mainwidget = QtGui.QWidget(self)
		mainwidget.setObjectName('mainwidget')
		layout = QtGui.QHBoxLayout()
		layout.setObjectName('layout')
		button = QtGui.QPushButton('OK')
		button.setObjectName('button')
		line = QtGui.QLineEdit()
		line.setObjectName('line')
		line.resize(line.sizeHint())
		layout.addWidget(line)
		layout.addWidget(button)
		mainwidget.setLayout(layout)
		self.setCentralWidget(mainwidget)
		self.setWindowTitle('QApp')
		statusbar = self.statusBar()
		statusbar.showMessage('ready')
		statusbar.setObjectName('statusbar')
		printChildren(self, ' ')

def main():
	app = QtGui.QApplication(sys.argv)
	win = MainWindow()
	win.show()
	sys.exit(app.exec_())

if __name__=='__main__':
	main()

i kod wygenerowany z formy, nieistotne, że jeden używa pyqt a kod jest napisany dla pyside jedno bylo robione na linuksie z pyqt a drugie na windowsie z pyside i jedno i drugie nie ma ze sobą nic wspólnego:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui\form.ui'
#
# Created: Tue Apr 09 09:37:14 2013
#      by: PyQt4 UI code generator 4.10
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainForm(object):
    def setupUi(self, MainForm):
        MainForm.setObjectName(_fromUtf8("MainForm"))
        MainForm.resize(249, 111)
        self.labelName = QtGui.QLabel(MainForm)
        self.labelName.setGeometry(QtCore.QRect(20, 40, 46, 13))
        self.labelName.setObjectName(_fromUtf8("labelName"))
        self.lineEdit = QtGui.QLineEdit(MainForm)
        self.lineEdit.setGeometry(QtCore.QRect(70, 40, 151, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.pushButton = QtGui.QPushButton(MainForm)
        self.pushButton.setGeometry(QtCore.QRect(140, 70, 75, 23))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))

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

    def retranslateUi(self, MainForm):
        MainForm.setWindowTitle(_translate("MainForm", "Window", None))
        self.labelName.setText(_translate("MainForm", "Name", None))
        self.pushButton.setText(_translate("MainForm", "OK", None))

w tym pierwszym jak widać chciałem się zorientować w hierarchi tych graficznych elementów i dowiedzieć jak się dostać do tych elementów na formie i udało mi się w taki sposób if item.objectName()=='line': item.setText('test') wiem trochę to głupie i takie rzeczy są raczej robione chyba przy użyciu sygnałów i slotow ale mam takie tendencje do odkrywania na nowo koła. W drugim przypadku jak widać wszyskie elementy są tworzone (przez automat) jako atrybuty klasy i można się do nich łatwo dostać. Jaka jest różnica między tymi obiektami, które są własnością pythona a tym posiadanymi przez Qt w takich prostych chłopskich słowach. Tutaj https://www.commandprompt.com/community/pyqt/x2420 jest to mniej więcej opisane i tak się zastanawiam czy mam się tym przejmować czy interfejs graficzny mam zrobić w designerze i skupić się na poważniejszych sprawach czy też muszę coś w tym temacie wiedzieć?

Ogólnie czy wszystkie widgety, które mają jawnie ustawionego 'rodzica' lub są dodane do layoutu, który jest następnie ustawiony dla jakiegoś innego widgeta są własnością Qt zgadza się? ale dla prostoty dodaje się również atrybuty klasy pokazujące na te widgety aby jakoś się do tego dostać tak czy coś źle zrozumiałem?

0

Następnie zabrałem się za coś o c++ ale takie czytanie o tych właściwościach języka i niskopoziomowych bibliotekach po prostu mnie usypia, ponadto samodzielna nauka takiego rozbudowanego języka jakim jest c++ jest dość trudna a niestety te książki są tak pisane, że autorzy wymienają wszystko ze standardu 'jak leci' tak jakby sami nigdy nic nie napisali.
Jeśli oczekujesz, że wszystko będzie proste i z górki to jesteś w błędzie i zmiana języka nie uchroni Cię od wnikania w szczegółowe detale.

1 użytkowników online, w tym zalogowanych: 0, gości: 1