Portál AbcLinuxu, 20. dubna 2024 04:58

Python a PyQt - 1 (úvod)

19. 1. 2006 | Jan Kaluza
Články - Python a PyQt - 1 (úvod)  

Základy programování pomocí interpretovaného jazyka Python se zaměřením na modul PyQt, s jehož pomocí lze snadno vytvářet grafické programy využívající Qt.

Obsah

Úvod do Pythonu
  Print
  Proměnné
  Komentáře
Datové typy v Pythonu
  Čísla
  Text - string
  Pole - list
Úvod do PyQt
  Importujeme PyQt
  Vytváříme okno
Závěr

V této sérii článků bych vás chtěl seznámit s Pythonem a jedním z jeho modulů zvaným PyQt, který umožňuje spojení Qt a Pythonu. Většina distribucí by měla Python i PyQt obsahovat. Pokud je zrovna vaše distribuce neobsahuje, můžete PyQt i Python zdarma stáhnout a nainstalovat podle návodu.

Python je interpretovaný, objektově orientovaný skriptovací jazyk. Má mnoho modulů, které obsahují funkce například pro práci s archivy, práci s emaily nebo pro tvorbu grafického rozhraní (TK, PyQt, WxWidgets...). Cílem seriálu je, aby si i člověk, který v Pythonu ještě neprogramoval, uměl udělat jednoduchý grafický program a pochopil základní principy Pythonu. V tomto díle si probereme základní datové typy Pythonu a řekneme si, jak vytvořit okno.

Úvod do Pythonu

Pokud máte Python nainstalován, spustíte ho příkazem python. Před vámi se objeví jeho interpret, do kterého již můžete zadávat příkazy. Pokud byste chtěli spustit příkazy přímo z příkazové řádky, můžete použít parametr -c Pythonu.

python -c 'print "Hello world"'

Další možností je spustit soubor. Ten spustíte jednoduchým příkazem python soubor.py. My v dnešním úvodu budeme používat zatím pouze první způsob spuštění. Znaky >>> signalizují vstup interpretu.

Print

Jak jste si možná již všimli, Python používá pro výstup na obrazovku příkaz print. Pokud chcete zobrazit text, musíte jej uzavřít do jednoduchých nebo dvojitých uvozovek. Takže například print "hello world" nebo print 'hello world' zobrazí text hello world.

Proměnné

Proměnnou vytvoříme stejně jako v ostatních jazycích pomocí operátoru "=". Pokud chcete například uložit do proměnné cislo číslo 5, můžete tak udělat kódem cislo=5. Typ proměnné určuje až její hodnota. Proto můžeme do jedné proměnné uložit text a následně například číslo. V C/C++ toto není možné. Vidět to můžete na následujícím příkladu.

>>> a="text"
>>> print a
text
>>> a=17
>>> print a*5
85

Komentáře

Komentáře v Pythonu můžeme vytvářet pomocí znaku #. Vše, co je za ním, je bráno jako komentář. Příklady komentářů můžete vidět v některých z dalších příkladů.

Datové typy v Pythonu

Čísla

Čísla můžeme mezi sebou sčítat, odčítat, dělit a násobit stejně jako ve většině jiných jazyků. Myslím, že za vše bude mluvit následující přiklad.

>>> 1+1
2
>>> 121/11
11
>>> 11*11
121
>>> (8+2)*10/10
10
>>> 7/3
1
>>> a=1 # Do promenne "a" ulozime cislo 1
>>> a
1
>>> a+1
2
>>> a*5-6
-1

V následujícím příkladu jsme používali pouze čísla celá. Proto se například u 7/3 automaticky zrušila desetinná místa. Samozřejmě v Pythonu existují i desetinná čísla a při výpočtech s nimi se celá čísla mění na čísla desetinná.

>>> 3.75/5
0.75
>>> 7.0/3
2.3333333333333335
>>> (1.3*5)/3.5
1.8571428571428572

Python podporuje i komplexní a imaginární čísla, ale pro začátek pro nás nejsou užitečná, takže si o nich povíme později.

Text - string

Text se v Pythonu ohraničuje jednoduchými nebo dvojitými uvozovkami. Texty můžeme spojovat pomocí operátoru +. Můžeme jednoduše přetypovat číslo nebo pole na text pomocí funkce str(objekt_k_pretypovani). V textech můžeme používat zaužívané znaky jako je třeba konec řádku ("\n") nebo obrácené lomítko ("\\"). Při vypisování textu funkcí print můžeme vypsat více textových proměnných ještě tak, že je oddělíme čárkou. V tom případě bude čárka ve výsledku nahrazena mezerou. Zase uvedu příklad.

>>> print "hello "+'world'
hello world
>>> print str(1+2)
3
>>> print "hello \" WORLD \"", str(2*2)
hello " WORLD " 4
>>> a="hello "+'world'
>>> print "hello world",a
hello world hello world

Text můžeme i opakovat tak, že ho jednoduše vynásobíme :-) (operátor "*").

>>> a="hello world "
>>> print a*3
hello world hello world hello world

Text je v Pythonu indexován podobně jako v C. Lze tedy přistupovat k jednotlivým znakům i částem textu. Nesmíme u indexování zapomenout na to, že první znak textu je indexován jako 0.

>>> a="hello world"
>>> print a[0] # vypise 1. znak textu
h
>>> print a[2:4] # vypise 3. a 4. znak textu
ll
>>> print a[2:-2] # vypise vse od 3. az po 2. znak od konce textu
llo wor
>>> print a[-2] # vypise 2. znak od konce
l
>>> print a[:-2] # vypise vse az po 2. znak od konce textu
hello wor
>>> print a[2:] # vypise vse od 3. znaku
llo world
>>> print a[-2:] # vypise vse od 2. znaku od konce textu
ld

Pole - list

Práce s poli je podobná jako indexování textů, ale místo znaků můžeme v polích uchovávat celé řetězce nebo čísla. K polím je v Pythonu přidružena celá řada funkcí například pro seřazení pole, nalezení položky v poli atd. O těch bychom si ale pověděli v některém z dalších dílů.

>>> a=["hello","world","ahoj","svete"]
>>> a
['hello', 'world', 'ahoj', 'svete']
>>> a[0]
'hello'
>>> a[:2]
['hello', 'world']
>>> a+["dalsi text"]
['hello', 'world', 'ahoj', 'svete', 'dalsi text']
>>> a
['hello', 'world', 'ahoj', 'svete']

Úvod do PyQt

V úvodu do PyQt se naučíme importovat PyQt modul. To znamená, že se načtou všechny funkce PyQt a my je budeme moci používat. Poté si řekneme o funkci pro vytvoření okna a vytvoříme si jednoduché prázdné okno.

pyqt - okno

Importujeme PyQt

Importování PyQt provedeme pomocí příkazu from qt import *. Tento řádek importuje vše z modulu qt. Pokud se objevila po zadání tohoto příkazu chyba, nemáte PyQt správně nainstalován.

Vytváříme okno

Nejprve musíme vytvořit samotný objekt aplikace. To zajistí funkce QApplication(sys.argv). QApplication si žádá parametry z příkazové řádky. Pro jednoduchost nebudeme používat parametry z příkazové řádky, ale dáme funkci QApplication() pouze prázdné pole.

app=QApplication([])

Dále musíme vytvořit okno naší aplikace funkcí QMainWindow().

win=QMainWindow()

Okno zobrazíme. Okno se zobrazí pouze v paměti, ale ještě ne na obrazovce.

win.show()

Nyní zajistíme, aby se po uzavření okna zavřela celá aplikace a nestála dále v paměti. Tento řádek si vysvětlíme až příště, ale zkráceně jde o to, že když aplikace ("app") řekne (zavolá signál), že jsou všechna okna uzavřena, tak se aplikace ("app") vypne (quit()).

app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))

Nakonec aplikaci spustíme a okno se zobrazí.

app.exec_loop()

Můžete si přečíst celý záznam z interpreteru.

>>> from qt import *
>>> app=QApplication([])
>>> win=QMainWindow()
>>> win.show()
>>> app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
True
>>> app.exec_loop()
0

Pokud byste dali příkazy, které jste zadávali do interpreteru, do souboru, můžete ho pak spustit příkazem python soubor.py.

Závěr

V dalším díle si povíme o podmínkách a cyklech, naučíme se do okna vepisovat text a vůbec si o Pythonu a PyQt budeme povídat hlouběji než v dnešním "úvodním" díle.

Související články

Začínáme programovat v jazyce Python
Kommander - 1 (Skriptované GUI)
Kommander - 2 (Starý parser)
Kommander - 3 (Nový parser)
Seriál: KDE: tipy a triky
Seriál: Začíname KProgramovať
Programujeme v PERLu - I
Programujeme v PERLu - II

Odkazy a zdroje

Trolltech - Qt
PyQt
Python

Další články z této rubriky

LLVM a Clang – více než dobrá náhrada za GCC
Ze 4 s na 0,9 s – programovací jazyk Vala v praxi
Reverzujeme ovladače pro USB HID zařízení
Linux: systémové volání splice()
Programování v jazyce Vala - základní prvky jazyka

Diskuse k tomuto článku

David Watzke avatar 19.1.2006 05:28 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc pěkný! :-) Zatím to chápu dokonce i já. :-D
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
19.1.2006 17:06 pinguin
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Watzke koukam ze hrajes quaka, he?
David Watzke avatar 19.1.2006 17:23 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Proč mi říkáš Watzke? Jde ti asi obsah patičky. No jo, ale ty asi moc nehraješ, jinak bys věděl, že to není jen v Quake. :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
19.1.2006 18:54 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Narážel na to, že komentátor v Quake3Arena hlásí: "two frags left, one frag left". Máš to přesně tak napsaný.

Jinak - Python všichni umíme, přejděme k věci :-)
David Watzke avatar 19.1.2006 20:11 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Narážel na to, že komentátor v Quake3Arena hlásí: "two frags left, one frag left". Máš to přesně tak napsaný.

Jestli někdo ví, co se řve v QIII, tak jsem to já. :-) Proto to tam mám napsaný. :-) Ale je to třeba i v Nexuizu.

PS: You are tied for the lead. :-D

“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 19.1.2006 20:15 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Jinak - Python všichni umíme, přejděme k věci :-)
Python všichni umíme? O tom ani nevím. :-D Každopádně PyQt je pro mě hodně zajímavý. Python - tak oblíbenej jazyk, navíc prý "pěknej", moderní a taky se nemusí kompilovat (pro to určitě existuje výraz, ale zrovna mě nenapadá). No a Qt - oblíbenej toolkit. Protože jsem zarytej KDE-user. :-) Takže jsem moc rád za tenhle seriál.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
19.1.2006 21:48 imout | skóre: 10 | blog: imout blog | Ostrava - Hrabůvka
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
...a taky se nemusí kompilovat (pro to určitě existuje výraz, ale zrovna mě nenapadá)...
interpretovaný ;-)
++++++++++[>+++++++<-]>-.<++++++++++[>--<-]>.<++[>+++<-]>.<<+++++[>++<-]>.
David Watzke avatar 19.1.2006 21:56 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Dík.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
19.1.2006 22:25 Spike | skóre: 30 | blog: Communicator | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Kompiluje se do bytecode.
20.1.2006 12:21 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Ne nutně, dá se to zakázat...
20.1.2006 19:26 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
O tom tedy docela pochybuji, imho se do byte kode kompiluje vžy, pouze se ne vždy tento bytekode uklada do souboru. Mám-li mezery, prosím o poučení.
21.1.2006 12:58 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Myslel jsem spíš to ukládání do souboru. Jinak Python je jazyk, implementací je víc, takže určitě bude existovat nějaký ten Python interpretr... Jestli to ale umí přímo Python od GvR nevím...
Marek Bernát avatar 21.1.2006 13:31 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
To že sa to neukladá do súboru vôbec nesúvisi s kompiláciou. Proste sa to neuloží a bude sa kompilovať znovu, that's all.

Samozrejme, že interpretovaný jazyk nemusí používať virtuálny stroj, ak to tak niekto naimplementuje, tak to tak bude.

Ale python nie je len jazyk. Existuje síce zopár implementácií, ale keď sa hovorí o pythone, tak sa myslí tá oficiálna. Podobne ako C++(pre nás gcc :-)), Java(Sun), C#(obvykle Mono).
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
David Watzke avatar 21.1.2006 14:14 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Všiml jsem si, že byte-code má příponu pyc. Jak takový soubor vytvořím?
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Marek Bernát avatar 21.1.2006 16:03 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
David Watzke avatar 21.1.2006 16:47 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Bohužel mi chybí lwc:
...
python pyconfig.py >> config.h
lwc seg-malloc.c+ > cdir/seg-malloc.c
/bin/sh: lwc: command not found
make[1]: *** [cdir/seg-malloc.c] Error 127
make[1]: Leaving directory `/home/david/compile/hmmm/toolchain/pyvm'
make: *** [all] Error 2
a ani s pomocí Google nedám dohromady kde to sakra seženu. :-(
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Marek Bernát avatar 21.1.2006 18:49 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Ten pyc som tam dal len ako prvú linku z googlu, čo som našiel a chcel som tým naznačiť, že ten compiler si ľahko nájdeš aj sám. Ničmenej, adresár lwc je priamo medzi zdrojákmi pyc. Letmé nahliadnutie do jeho makefileu ukazuje, že sa inštaluje do ~/bin a keďže túto cestu nemáš v PATH, tak to nefunguje. Som si istý, že si s tým už poradíš – buď zmeň Makefile, alebo pridaj ten adresár do PATH.

Inak, ak ťa zaujíma ako funguje kompilácia priamo v pythone, tak si pozri dokumentáciu, časti 18.8 a 19.
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
David Watzke avatar 21.1.2006 18:58 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Ajooo... ten adresář chtěl vytvořit, to je pravda... díky ti!
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 21.1.2006 19:03 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Pomohlo tedy PATH=$PATH:~/bin a znova make, je tu ale další chyba...
gcc -c -O3 -Wall -Wno-parentheses cdir/IO.c -o objdir/IO.o
cdir/IO.c:28: error: conflicting types for 'malloc'
cdir/IO.c:28: error: conflicting types for 'malloc'
make[1]: *** [objdir/IO.o] Error 1
make[1]: Leaving directory `/home/david/compile/hmmm/toolchain/pyvm'
make: *** [all] Error 2
Nějak mi to není přáno... Každopádně tam píšou, že je to otestovaný jen na x86 (asi 32bit) a že pokud to chci kompilovat na jiné architektuře, mám raději počkat na další verze...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Marek Bernát avatar 21.1.2006 19:45 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
No ja ti už konkrétne radiž nebudem, lebo tých errorov môže byť ešte kopa. Viac ti prospeje, ak sa sám prehrabeš zdrojákmi a prídeš na to, čím to môže byť. Ak nevieš C, tak to nechaj tak.

A načo vlastne potrebuješ kompilátor? Keby si si pozrel tú kapitolu 18.8 , tak by si vedel, že kompilátor je aj priamo v pythone.
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
David Watzke avatar 21.1.2006 19:59 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
C neumím. To jsem nevěděl. Zkusil jsem si spustit Pythoní prompt a povídám:
>>> import py_compile

>>> compile('test.py')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: compile() takes at least 3 arguments (1 given)

>>> compile('test.py, test.pyc')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: compile() takes at least 3 arguments (1 given)
:/ podle manuálu by měl stačit jeden argument... Jde mi z toho hlava kolem. :-(
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Marek Bernát avatar 21.1.2006 20:27 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Takto python nefunguje. Správne volanie je py_compile.compile(). Viď dokumentácia k modulom.
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
David Watzke avatar 21.1.2006 21:00 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Ó ano. Omliuvám se s Pythonem jsem začal... včera. :-D
from py_compile import compile
compile('/home/david/devel/python/test.py')
Takhle je to lepší. :-) Díky za pomoc.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
26.1.2006 18:34 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
No, jestliže jsi lama (bez urážky), tak by ti asi mělo být i řečeno, že v Pythonu netřeba ručně kompilovat, děje se to samo automaticky. Jako začátečníka by tě vůbec němělo zajímat (není k tomu žádný důvod), jak se dá explicitně kompilovat, je to až hodně pokročilé téma pro speciální případy použití.
Marek Bernát avatar 26.1.2006 20:00 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Presne tak. Tiež som sa ho pýtal, že na čo to potrebuje, ale zrejme si tú otázku nevšimol, alebo ju ignoroval, predpokladajúc, že je to nutné.

To je čiarok v jednej vete :-)
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
David Watzke avatar 26.1.2006 20:10 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Proč... no chtěl jsem zkusil něco napsat, nic víc. :-) A zkusit si to zkompilovat, ale jinak to dělat nebudu...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 22.1.2006 14:27 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Kompilátor bude vypadat takto pro soubor (zadá se jako parametr):
#! /usr/bin/env python
# -*- coding: UTF-8 -*-

import sys, py_compile

py_compile.compile(sys.argv[1])
a pro adresář:
#! /usr/bin/env python
# -*- coding: UTF-8 -*-

import sys, compileall

compileall.compile_dir(sys.argv[1], 1)
To jen kdyby to tu někdo hledal. :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Marek Bernát avatar 20.1.2006 22:48 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Čo konkrétne tým myslíš?
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
12.3.2006 23:22 pinguin
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Hm, napsal jsem watzke, protože tak jsi napsanej. No ale hlavně jsem nenapsal že je to jen v quake, ale "Ty asi hraješ quake,he?", což je úplně něco jiného, a právě to, že jsem se ptal konkrétně na quake a ne na nic jiného (kde to klidně být může) ukazuje, že ho nejspíš hraju!!! Btw, jestli to mám brát jako výzvu, ozvi se na p-motycak@volny.cz, můžeme si dát duel, nebo přijď na GP, náš klan má tréninky Út,St,Čt a Ne od 19:00 ;)
19.1.2006 06:56 trancelius | skóre: 22
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
Docela se těším na pokračování... snad jen "funkce QMainWindow" není funkce, je to třída, takže při jejím volání se vytváří instance
19.1.2006 08:25 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
A co jineho nez fce (metoda) je kontruktor tridy? Souhlasim vsak s tim, ze by to v clanku pro novacky melo by vysvetleno.
-- OldFrog
19.1.2006 09:11 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
V Pythnu je trida volatelny typ, vola se skutecne trida. Pri volani tridy se pak mimo jine spousti inicializacni metoda __init__(). O konstruktoru bych nemluvil, je to matouci, protoze v Pythonu jsou objekty impplementovany jinak (dynamicky) nez ve znamych statickych jazycich jako Java, C# a podobne.
Marek Bernát avatar 19.1.2006 09:35 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Volatelný typ to síce je, ale to neozrejmuje problém o nič viac, ako keby som povedal, že trieda je kus bargrastu bez fropolitu.

Podstatné je, ako je to volanie implementované a v tomto sa python sa takmer nelíši od statických jaykov.

Dôsledok je, že o konštruktore hovoriť treba, pretože funkcia __init__() nie je nič iné ako konštruktor.
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 10:53 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Ale houby, to prece jasne ozrejmuje, ze se jedna o volani tridy a ne funkce. A ze volani tridy neni mozno povazovat za volani konstruktoru, protoze nekteri jedinci, jako treba ty, za konstruktor zase povazuji metodu __init__(). Tudiz tu mame uz dva vyklady toho, co je v Pythonu obdoba konstruktoru. Povazuji za chybu snazit se prenaset do pythonu pojeti oop tak, jak je implementovano v rade znamych statickych jazyu, protoze v pythonu je implementovano VYRAZNE jinak s ohledem na jeho dynamickou povahu. Napr. v Pythonu je i trida objekt, tedy instance nejake jine tridy nebo datoveho typu, podle toho jak se na to divas. Snazit se nazirat na oop pythonu v pojeti oop jazyku jako Java nebo C# je nevhodne, protoze te to uvede na scesti a nedovoli ti to pochopit, jak Python vlastne funguje a plne vyuzit jeho moznosti a schopnnosti.
Marek Bernát avatar 19.1.2006 11:24 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Nechcem začínať flame o konštruktoroch, ale asi sme sa nepochopili :-)

Takže ešte raz poviem, to čo som chcel povedať:

V jazykoch ako Java sa nový objekt vytvára nasledovným spôsobom: 1) vytvorý sa nový objekt 2) zavolá sa naňho konštruktor

V pythone sa to robí presne tak isto, ibaže je to schované pod "volanie triedy" a konštruktorom skutočne je funkcia __init__. __init__? A videli ste už funkciu __init__ použitú inak ako konštruktor (teda funkciu, ktorá má objekt dostať do správneho začiatočného stavu)? Nehovorím, že výnimky sa nenájdu a hneď ma aj nejaké napadli, ale to sú skutočne výnimky.

Po druhé: to, že python nejaký typ volá, nám ešte vôbec nepovie, čo sa s ním deje. Keď budeme volať funkciu, zrejme sa bude diať niečo iné, ako keď budeme volať triedu. Chcel som poukázať na to, že pod povrchom volania triedy nie je žiadny iný proces ako v Java, C#, atď.

A po tretie: keď už chceme hovoriť o OOP, tak hovorme o Smalltalku. Python nie je OOP jazyk v pravom slova zmysle, ale vďaka tomu, ako bol navrhnutý umožňuje pohodlne programovať objektovo, ale rovnako pohodlne sa v ňom dá programovať aj procedurálne a v budúcnosti zrejme aj funkcionálne.

Aby som to zhrnul, python netreba nijako mystifikovať. Je to síce dobrý jazyk s peknými vlastnosťami, ale pod povrchom leží staré dobré C :-)
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 16:07 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Ani ja nechci flamovat o konstruktorech, protoze je to zbytecne. Python ma volatelne tridy a pri vytvareni jeji instance se volaji jeji metody __new__() a __init__(). Oznacovat cokoli z toho za konstruktor povazuji za hloupe, protoze to vede k asociaci s konstruktory znamejsich jazyku, coz vede k chybnym predpokladum a je tak zavadejici. To ostatne ukazuje i debata na kterou jsem reagoval.
19.1.2006 14:23 machr
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
> Ale houby, to prece jasne ozrejmuje, ze se jedna o volani tridy a ne funkce.

- presne receno: v pythonu trida == objekt a taky funkce == objekt. tudiz volani funkce i volani tridy je vzdy totez - volani objektu.

- a nazyvat metodu __init__ konstruktorem je naprosto spravne. Nevytvari sice objekt ve smyslu alokace pameti (o kterou se v pythonu stejne nestarame), ale vytvari ho ve smyslu inicializace.

mam dojem, ze se statyckejma jazykama si to pletete vy!
19.1.2006 15:41 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
To je spatna logicka uvaha, v pythonu je objekt prakticky vsechno, ale nejsou to same, maji ruzne datove typy a pri jejich volani se deji ruzne veci, jinak se chovaji a slouzi k jinym vecem. Tridu s funkci nelze zamenovat. To zduraznuji.

Nevytvari sice objekt ve smyslu alokace pameti Narozdil od metody __new__(), ze? Neni tedy spis konstruktor toto? A dostavame se opet k tomu, co jsem rikal. Hledat analogii u oop jazyku implementovanych jinak je silne zavadejici a vede k chybnemu chapani, proto je nevhodne.

mam dojem, ze se statyckejma jazykama si to pletete vy! Vazne? A procpak?
Marek Bernát avatar 19.1.2006 16:38 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Nevytvari sice objekt ve smyslu alokace pameti Narozdil od metody __new__(), ze? Neni tedy spis konstruktor toto? A dostavame se opet k tomu, co jsem rikal. Hledat analogii u oop jazyku implementovanych jinak je silne zavadejici a vede k chybnemu chapani, proto je nevhodne.
Milý pane, ste trochu vedľa. Konštruktorom sa v OOP (nie len v Jave, C#, ale v OOP všeobecne) chápe funkcia, ktorá inicializuje objekt ako taký, nestará sa o nízkoúrovňové procesy.

Vytvorením objektu sa potom chápe jeho vytvorenie v pamäti (new) a inicializácia (init). Ešte raz to zopakujem, jediný rozdiel oproti Jave je syntaktický: v Pythone napíšeme = Class(); a v Jave = new Class(), ale v oboch jazykoch vedú tieto výrazy k rovnakému procesu.

A k akému chybnému chápaniu vedie pomenovať funkciu ktorá sa stará o inicializáciu objektu? Jediné chybné chápanie, ktoré som si všimol je vaše, ale pramení zjavne z toho, že neviete, čo to konštruktor je. A to ma dosť zaráža.
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 18:03 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Omlouvam se za spinavy trik, ale na to zda __new__() neni konstruktor jsem se ptal zamerne s vedomim, ze za konstruktor ji oznacil Guido van Rossum v oficialnim dokumentu, cimz jsem vas dostal do tezkeho sporu s Autorem Pythonu, chcete-li poprit, ze je to konstruktor.

Znovu opakuji, oznacovat neco v Pythonu jako konstruktor je zavadejici, protoze kazdy na zaklade jazyku a znalostech ktere zde ma bude za nej povazovat neco jineho. V tuto chvili to jsou uz prokazatelne tri ruzne veci, coz mi myslim dava prukazne za pravdu. Hadat se s vama, ze vase pojeti konstruktoru v pythonu je jedine spravne, odmitam. Je to hloupost, ja tak neoznacuji nic, protoze je to zavadejici a ted uz snad chapete proc.

Konštruktorom sa v OOP (nie len v Jave, C#, ale v OOP všeobecne) chápe funkcia, ktorá inicializuje objekt ako taký, nestará sa o nízkoúrovňové procesy.

Prosim o odkaz dokazujici toto tvrzeni. Co ja vim, tak obecna teorie oop mluvi napr. o posilani zprav mezi objekty, ale nic o funkcich, ktere spadaji pod 'strukturove orientovane programovani'. Jestli se nejak vyjadruje o konstruktorech mi neni znamo a rad bych se na to podival.

Ale jde mi skutecne o obecnou teorii oop. Co mohu pozorovat, tak naprosta vetsina lidi zna oop az jako nejakou konkretni implementaci(e) a na zaklade toho pak za obecne veci povazuje veci, ktere jsou pouze zalezitosti jedne nebo par implementaci. Souhlasim s tim, ze oop je predevsim o abstrakci a ne implementaci (ty to nazyvas nizkourovnovymi procesy).

Vytvareni objektu v Jave a Pythonu ma podobnou syntaxi (zapis), ale jde o principialne odlisne veci, protoze trida v Pythonu je neco jineho nez trida v Jave a lze s nimi provadet ruzne veci.

Je to zase predevsim o abstrakci. Pri programovani v Pythonu je nutno prijmout jeho abstrakci, aby jej bylo mozno efektivne vyuzivat. A Python se na tridy diva jinak, jako na volatelny datovy objekt (data), se vsemi z toho plynoucimi dusledky (napr. predavani ve funkcich a metodach, modifikovatelnost).
Marek Bernát avatar 19.1.2006 18:51 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Máte pravdu, to s tým konštruktorom beriem späť. Je to asi naozaj len moja predstava, lebo som sa doteraz takmer v každom článku o nejakom jazyku stretol s pojmom konštruktor v zmysle inicializačnej funkcie. Jednako, v tomto príspevku ešte použijem termín konštruktor – for need of a better word – v zmysle inicializačnej funkcie.

Samozrejme, že v čistom OOP existujú len správy, ale Python nie je čistý OOP jazyk.

Konkrétne, pozrite si tento článok. Podstata je, že v staticky typovaných jazykoch exituje len jeden spôsob vytvorenia objektu: volaním konštruktoru, kdežto v čistých OOP stačí poslať triede (ešte nevytvorenému objektu) ľubovoľnú správu a objekt sa vytvorí popritom. AFAIK v pythone niečo takéto nie je možné, ale musí sa najprv objekt vytvoriť a až potom môžeme volať niektorú jeho metódu, i.e.:

ob = Object()
ob.show()

ale nie

ob = Object.show()

a teda v tomto ohľade je pythone takmer rovnaký ako Java, C#. Rovnako sa pritom volá konštruktor (opäť v mojom chápaní) objektu lenže v pythone sa nazýva __init__ a nie Object().

physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 19:00 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Hergot Petře, piš to do blogu, jó? :-) Jinak OOP se doporučuji učit ve Scheme. Tam to pořádně člověk pochopí :-)
19.1.2006 19:04 machr
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
> Omlouvam se za spinavy trik, ale na to zda __new__() neni konstruktor jsem se ptal zamerne s vedomim, ze za konstruktor ji oznacil Guido van Rossum v oficialnim dokumentu, cimz jsem vas dostal do tezkeho sporu s Autorem Pythonu, chcete-li poprit, ze je to konstruktor.

- v tom pripade je Guido popletenej. nc, lepsi popletenej genius, nez vsevidouci hlupak ;).

PS: autor(ka) jazyka godel prej taky nerozumel predikatovy logice....
19.1.2006 17:43 machr
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
> To je spatna logicka uvaha, v pythonu je objekt prakticky vsechno,

ano, v pythonu je objekt uplne vsechno

> ale nejsou to same, maji ruzne datove typy a pri jejich volani se deji ruzne veci, jinak se chovaji a slouzi k jinym vecem.

pochopitelne. tomu se rika polymorfismus

> Tridu s funkci nelze zamenovat. To zduraznuji.

LZE! pokud mam napriklad funkci, ktera jako parametr ocekava funkci, tak tam misto toho muzu klidne soupnout tridu. Oboji jsou to volatelne objekty a je mozne je zamenovat.

> Nevytvari sice objekt ve smyslu alokace pameti Narozdil od metody __new__(), ze?

metoda __new__ je mnohem nizkourovnovejsi nez __init__. je to spis takovej hack.

> Neni tedy spis konstruktor toto?

uz jenom cekam, kdy prohlasite za konstruktor C funkci malloc....

> Hledat analogii u oop jazyku implementovanych jinak je silne zavadejici a vede k chybnemu chapani, proto je nevhodne.

dobre, nehledejme tedy analogie mezi jazyky a drzme se obecnych principu OOP.

> mam dojem, ze se statyckejma jazykama si to pletete vy! Vazne? A procpak?

kdyz vezmu v uvahu jen vas aktualni prispevek, tak napriklad z tohoto: "Tridu s funkci nelze zamenovat. To zduraznuji." mam dojem, ze si python pletete napriklad se silne typovanou Javou, nebo dokonce s C++...
19.1.2006 19:08 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Ne, uplne vsechno v Pythonu objekt neni, treba if, as nebo komentar.

tomu se rika polymorfismus Bud jste nepochopil co jsem napsal, nebo nevite co je to polymorfismus, ktery se tyka moznosti predat metode ci funkci ruzny pocet parametru a/nebo ruznych datovych typu. Povsimnete si prosim, ze ja hovorim o VOLANI nikoli jejich PREDAVANI. Vase odpoved mi tudiz nedava smysl, stejne jako ty nasledujici.

Jeslize pisu, ze trida a funkce neni to same a nelze je zamenovat, pak doufam, ze je zrejme, ze hovorim o jejich funkcni strance. A jestli si myslite opak, zkuste funkci x nahradit tridou:
def x(a, b):
    return a+b
print x(1, 2)
LZE! pokud mam napriklad funkci, ktera jako parametr ocekava funkci, tak tam misto toho muzu klidne soupnout tridu. Oboji jsou to volatelne objekty a je mozne je zamenovat.

Vyborne, tak si to predvedeme prakticky, treba se naucim neco noveho:
def cmpfun(a, b):
    if a>b: return 1
    if b>a: return -1
    return 0
print [1,5,9,7,5,3].sort(cmpfun)
Metoda sort jako parametr ocekava funkci. Predavam funkci cmpfun, prosim o jeji nahrazeni tridou.

metoda __new__ je mnohem nizkourovnovejsi nez __init__. je to spis takovej hack.

Neni to hack a je na stejne urovni jako init, jen se tak casto neprekryva. Vase teorie zacina dostavat trhliny :-), a vam chybi poradny argument.

uz jenom cekam, kdy prohlasite za konstruktor C funkci malloc..

To se tedy nacekate. Ani toto neni poradny argument, povazuji to zatim za nezodpovezene.

kdyz vezmu v uvahu jen vas aktualni prispevek, tak napriklad z tohoto: "Tridu s funkci nelze zamenovat. To zduraznuji." mam dojem, ze si python pletete napriklad se silne typovanou Javou, nebo dokonce s C++

Cim dal lepsi.

1) co se tyce zamenovani, pockame na vase reseni prikladu, jestli se vam podari funkci zamenit tridou.

2) bylo by slusne nebrat aktualni prispevek, ktery jste ani nepochopil, ale to, co vas k tomu tvrzeni vedlo. existuje neco takoveho?

3) python je silne typovany, ted si to zas pletete se statickym typovanim

4) kontrolni otazka, je C++ silne typovany jazyk?
19.1.2006 19:54 machr
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
> tomu se rika polymorfismus Bud jste nepochopil co jsem napsal, nebo nevite co je to polymorfismus, ktery se tyka moznosti predat metode ci funkci ruzny pocet parametru a/nebo ruznych datovych typu. Povsimnete si prosim, ze ja hovorim o VOLANI nikoli jejich PREDAVANI. Vase odpoved mi tudiz nedava smysl, stejne jako ty nasledujici.

- ne, polymorfismus je o tom, ze jeden zadany prikaz/vyraz/cokoli se muze chovat pokazde jinak v zavislost na typech objektu. tudiz pri volani tridy se deje neco trochu jinyho nez pri volani funkce. to ale neznamena, ze se to neda zamenovat.

- navic pretezovani funkci neni jedina forma polymorfismu. rika vam neco treba pretezovani operatoru? to je taky jista forma polymorfismu. a na volani se da divat jako na operator....
##########################################
def x(a, b):
    return a+b

print x(1, 2)

>>> class x:
...  def __init__(self, a, b):
...   self.c = a+b
...  def __str__(self):
...   return str(self.c)
...
>>> print x(1, 2)
3
# i kdyz pri jinych prilezitostech by bylo potreba napr.
# doplnit metodu __int__ a podobne, 
# ale o to v OOP v pojeti pythonu jde. muzete objekty
# zamenovat. pokud rozumi pozadovanym zpravam...
##########################################
>>> def cmpfun(a, b):
...     if a>b: return 1
...     if b>a: return -1
...     return 0
...
>>> print [1,5,9,7,5,3].sort(cmpfun)
None
# predpokladam ze jste si jen neuvedomil, ze metoda sort
# pracuje s puvodnim polem a myslel jste toto:
# a = [1,5,9,7,5,3]
# a.sort(cmpfun)
# print a

######################################################

>>> class cmpfun(int):
...  def __new__(cls, a = 0, b = 0):
...   if a > b: return int.__new__(cls, 1)
...   if a < b: return int.__new__(cls, -1)
...   return int.__new__(cls, 0)
...
>>> a = [1,5,9,7,5,3]
>>> a.sort(cmpfun)
>>> print a
[1, 3, 5, 5, 7, 9]
>>>               

##########################################################
takze sem prave prokazal, ze funkce a tridy jsou zamenitelny....

mam pocit, ze OOP v pythonu (a podobnych jazycich, napr. smalltalk) prilis nerozumite. Nikoho toti nezajima, ze se jedna o uplne jiny objekt, kdyz shodne reaguje na stejne zpravy....

> Neni to hack a je na stejne urovni jako init, jen se tak casto neprekryva. Vase teorie zacina dostavat trhliny :-), a vam chybi poradny argument.

na tom, ze je to hack trvam

> 3) python je silne typovany, ted si to zas pletete se statickym typovanim

jo, to sem poplet. omlouvam se.

> 4) kontrolni otazka, je C++ silne typovany jazyk? castecne. predpokladejme:
class A { public: int x; };
class B { public: float y; };
void f() {
        A* a;
        B* b;
        *a = *b; // nemozne
        a = (A*)b; // mozne bez jakekoli kontroly typu.
                   // proste se nastavi ukazatel na adresu
                   // b (obcas se to ale hodi ;))
}
19.1.2006 21:56 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
ne, polymorfismus je o tom, ze jeden zadany prikaz/vyraz/cokoli se muze chovat pokazde jinak v zavislost na typech objektu. tudiz pri volani tridy se deje neco trochu jinyho nez pri volani funkce. to ale neznamena, ze se to neda zamenovat.

Ne jen v zavislosti na typech objektu, ale i jejich poctu. Dale jde o datovy typ parametru, ktere v nekterych jazycich nemusi byt objekty. Ale v podstate mate pravdu, presne to jsem mel na mysli, ani jeden jsme to nerekli dokonale, protoze v jave se to napr. resi tak, ze trida muze mit vice metod se stejnym nazvem a rozdilnymi parametry a pri volani metody se vybere ta odpovidajici. Tudiz metoda jako takova sve chovani nemeni a polymorfismus se realizuje onim automatickym vyberem vhodne metody.

Pretezovani operatoru mi pochopitelne zname je, v pythonu je to implementovano jako pretezovani specialnich metod, tudiz to same. Tyto metody myslim uz na svych strankach o pythonu zminuji i s ukazkou, ze pouziti operatoru a primo specialni metody vede k rozdilnemu vysledku. Jestli to tam neni, tak to jen mam pripraveno ke zverejneni.

Prvni ukazku zatim neuznavam, protoze trida vraci spatny datovy typ, ale vim, ze to pujde snadno opravit.

Druha ukazka me prekvapuje, na reseni s metodou new jsem nepomyslel (a pritom vim, ze s jejim pouzitim muze trida vracet cokoli, nejen svou vlastni instanci) a uznavam, ze tridou lze nahradit funkcnost funkce. Je to diky tomu, ze jeji staticka metoda new ma funkcnost funkce.

takze sem prave prokazal, ze funkce a tridy jsou zamenitelny..

Ne, zatim jste prokazal, ze tridou lze nahradit funkcnost funkce, tedy python by se bez nich obesel bez ztraty funkcnosti. Nyni je jeste prokazat opak, to jest nahradit funkci funkcnost tridy a prokazat tak, ze se python obejde bez trid bez ztraty funkcnosti. To se vam myslim nepodari, protoze obaleni tridy funkci neni reseni a jinak si neumim predstavit, jak napr. chcete vytvaret nove datove typy a dalsi veci, ktere tridy umoznuji.

mam pocit, ze OOP v pythonu (a podobnych jazycich, napr. smalltalk) prilis nerozumite. Nikoho toti nezajima, ze se jedna o uplne jiny objekt, kdyz shodne reaguje na stejne zpravy

To je samozrejme, jenze jak uz jsem vysvetloval, ja jsem hovoril o zamene jejich funkcnosti. Presvedcil jste me, ze v jednom smeru to jde, tridami lze nahradit funkce, protoze obsahuji metody, ktere jsou funkcnosti blizke funkcim. Naopak se vam to asi nepodari.

Mimochodem, ta prvni polovina se vam podarila jen diky metode new, kterou nazyvate hackem :-). Ja vsak trvam na tom, ze to hack neni, bez toho byste nemohl delat prave takove veci. Mozna by bylo ale dobre si nejprve definovat co je to hack.

Ad C++, ja jsem toho nazoru, ze silne typovany neni :-), protoze umoznuje scitat hrusky s jabkama, dedictvi po C.

Stale stojim o vysvetleni toho, proc se domnivate, ze si python pletu se statickymi jazyky, i kdyz uz zacinam tusit, ze jde o nedorozumneni a ze je to kvuli tomu, ze si pod tvrzenim, ze funkce a tridy nejsou zamenitelne predstavujem kazdy neco jineho.

Pisu trochu zkratkobite, ale to proto, ze to vsechno pracne vytukavam na pda. Jinak co jsem chtel rict tim druhym prikladem jste odhadl spravne, taky slo pouzit sorted().
19.1.2006 23:22 machr
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
> Prvni ukazku zatim neuznavam, protoze trida vraci spatny datovy typ, ale vim, ze to pujde snadno opravit.

o to mi slo. ukazat ze zalezi na tom, jak objekt reaguje na zpravy ;-). prikaz print vola metodu __str__ jak u puvodniho intu, tak i u myho objektu. takze jsou zamenitelny (v tomhle pripade)

> Stale stojim o vysvetleni toho, proc se domnivate, ze si python pletu se statickymi jazyky, i kdyz uz zacinam tusit, ze jde o nedorozumneni a ze je to kvuli tomu, ze si pod tvrzenim, ze funkce a tridy nejsou zamenitelne predstavujem kazdy neco jineho.

asi jsem se unahlil. byl to jenom takovej dojem. Kdyz sem videl jak se snazite funkce a tridy oddelovat, vzpomel sem si na Javu a kolik ma vzdycky reci :-D

> To je samozrejme, jenze jak uz jsem vysvetloval, ja jsem hovoril o zamene jejich funkcnosti. Presvedcil jste me, ze v jednom smeru to jde, tridami lze nahradit funkce, protoze obsahuji metody, ktere jsou funkcnosti blizke funkcim. Naopak se vam to asi nepodari.

jo, naopak to asi nepujde. Kdyz sem rikal, ze jsou funkce a tridy zamenitelny, tak sem myslel jen ten jeden smer. Myslel jsem ze je to zrejme z toho, ze se hadame pod prispevkem, kde kdosi rikal, ze volani QCosi() neni volani funkce. Mel jsem to ale explicitne uvest - moje chyba.
20.1.2006 19:18 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Těší mě, že jsme dokázali dospět do rozumného závěru :-).
Marek Bernát avatar 19.1.2006 09:28 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Záleží od toho, či pod konštruktorom chápete len tú funkciu, ktorá inicializuje objekt, alebo celý proces jeho vytvorenia. Pretože žiadna funkcia QMainWindow() v pythone neexistuje. QMainWindow() v skutočnosti vytvorí nový objekt typu QMainWindow a odkaz naňho potom odovzdá ako prvý argument funkcii QMainWindow.__init__() – takže analógiu môžeme vidieť skôr s týmto kódom Javy (C++):
win = new QMainWindow(); To len aby sme zatiaľ dali veci na pravú mieru. Určite sa aj k tejto problematike autor neskôr vyjadrí. Inak fajn článok, držím palec ;-)
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
kouzer avatar 19.1.2006 07:11 kouzer | skóre: 11 | Mladá Boleslav
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
Nebylo by lepší se věnovat Qt než základům pythonu? Zajímavý serial na toto téma vyšel na Linuxsoftu: http://www.linuxsoft.cz/article_list.php?id_kategory=217
Linux user #448944.
19.1.2006 07:31 JP
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Mne to prijde jako docela dobra kombinace. Nepredpokladam, ze clanek nauci ctenare Python do hloubky (a Qt urcite taky ne), na druhou stranu pro cloveka neznajiciho ani Python ani Qt to muze byt dobry start i pro pozdejsi pouzivani teto knihovny v C++ a vzhledem k jednoduchosti Pythonu budou "vedlejsi naklady" zanedbatelne.
Marián Kyral avatar 19.1.2006 07:12 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin

Díky, už asi měsíc se chystám s PyQt začít, ale nebylo dost času. Teď jsem rád, že jsem počkal :-)

19.1.2006 08:40 andrew
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
uplny suhlas, ze je to skvela myslienka zacat s takymto serialom, kedze kazdy by si rad niekedy spravil daku vlastnu miniaplikaciu s GUI. takze drzim palce a tesim na dalsie skore clanky
19.1.2006 09:29 petr mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
Ja si udelam trochu reklamu. Koho by zajimal trochu hlubsi pohled na datovy model a promenne, muze se podivat na web ktery jsem zacal psat: wraith.iglu.cz/python. Jeste tam toho moc neni, ale tohle uz zrovna jo.
19.1.2006 13:06 springer | skóre: 10 | blog: engineering
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
uz jsme to chtel pochvalit davno (tedy ten web, nejen ten Py). Chtel bych vedet, jak do toho webu pridavate dalsi clanky. Jde to nejak zvenku, nebo to muzete delat pouze vy? Je ten Vas web nejaka takova skladacka, ze by to mohl pouzit i nekdo jiny, nebo je v tom tolik osobniho know-how, ze je to proste udelano na Vasi osobu. Libi se mi zejmena ta strohy ale prijemny graficky vyraz.
kralovna Alzbeta a Stallmanuv holic diskutuji free software
19.1.2006 16:27 petr mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Engine toho webu je designovany na poskytovani informaci, tudiz pocet rozptylujicich prvku je omezen na minimum. Dale je designovany na snadnou aktualizaci a spravu, ale jen pro mou osobni potrebu, takze nejake webove rozhrani na editaci a pridavani stranek ve stylu wiki implementovano neni. Tudiz to muze delat jen ten, kdo ma pristup k obsahu www serveru. Zvladaji to ale i laicti uzivatele, kterym neni zatezko se naucit par xhtml znacek a pravidel.
Daniel Kvasnička ml. avatar 19.1.2006 09:34 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
parada, zasluzny serial. PyQt se mi moc libilo (Eric3 je super!!), ale pak jsem presel na GNOME a wxPython. A navic na ostatnich platformach je to s wxPythonem taky trosku jednodussi, nez s PyQt (no flame). Docela jsem cumel, ze treba Mac OS X obsahuje wxPython v zakladni instalaci.
FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
19.1.2006 14:50 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
trosku jednodussi, nez s PyQt (no flame)
neni (no flame) ;)
Kuolema Kaikille (Paitsi Meille).
19.1.2006 15:26 mimi.vx | skóre: 37 | blog: Mimi.VX | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
mam blby pocit ze s PyQt4 uz bude jedno na jake platforme jedes ... a i 3 rada se da sehnat skoro pod vse ... kdo trochu hleda tak najde
USE="-gnome -kde";turris
19.1.2006 09:38 razor | skóre: 33
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
Jen pro úplnost. Text se v Pythonu dá ohraničit i třemi dvojtýmy uvozovkami.
David Watzke avatar 19.1.2006 18:17 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Spíš dvěma trojitými. :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
19.1.2006 19:14 razor | skóre: 33
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Trvám na: třema dvojtými :-)
jednoduché ' '
dvojté "  "
tři dvojté """   """
19.1.2006 10:28 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše komplexní a imaginární čísla
Odpovědět | Sbalit | Link | Blokovat | Admin
No pokud vím tak komplexní=imaginární asi pojmem imaginární myslíš číslo "ryze imaginární" alespoň mi to učitelka z MAT neuznala když jsem napsal jen "imaginární" ;-)
19.1.2006 10:40 machr
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
ne, komplexni != imaginarni.

komplexni cislo se sklada ze dvou slozek: z realne a z imaginarni. realna slozka se vetsinou zobrazuje na vodorovne ose a imaginarni na svisle.
Marek Bernát avatar 19.1.2006 11:26 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
A aby sme to upresnili ešte viac, tak komplexné číslo sa väčšinou nezobrazuje :-D
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 14:26 machr
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
a co je teda komplexni rovina, kdyz ne zobrazeni vsech komplexnich cisel ???? ! ???? ! ???? ! ???? ! ???? ! ???? :-D
19.1.2006 14:45 nardew | skóre: 5
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
gaussova rovina ti nieco hovori? ;)
the best way of Memtest is emerge qt kde-meta
Marek Bernát avatar 19.1.2006 16:49 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Náhodou niečo áno. Ale gaussova rovina je len bijekcia medzi komplexnými číslami a rovinou a ako taká nemá o nič väčšiu hodnotu, ako ľubovoľná íná rovina ;-)

Išlo mi o to, že komplexné čísla sú náramné užitočné pri počítaní, kvôli vynikajúcim vlastnostiam a len málokedy ich niekto kreslí. Zvyčajne len na strednej škole, aby pani učiteľka ozrejmila žiakom, že sin a cos nadobúdajú veľmi pekný význam :-)
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 17:30 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
V elektrotechnice se kreslí zhruba asi tak často jak počítají.
Marek Bernát avatar 19.1.2006 18:16 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
To je celkom možné, ale ja som napísal, že sa nezvyknú vo všeobecnosti kresliť a to -- ak nie som ešte úplne slepý -- nie je v rozpore s vaším tvrdením. Teda pokiaľ elektrotechnika nepredstavuje najväčšiu oblasť prírodných vied, kde sa narába s komplexnými číslami, ehm ;-)

Anyway, teraz už úplne offtopic a čisto zo záujmu, čo napríklad kreslíte? Ja som sa doteraz stretol len s diferenciálnymi rovnicami popisujúcimi elektrické obvody, ale pritom som si nič nekreslil :-)
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 18:50 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Jestli je elektrotechnika největší oblastí přírodních věd (osobně elektrotechniku neřadím do přírodních věd) nevím, protože nevím do jaké míry se používá v jiných oblastech. Ale na elektroprůmyslovkách se na výuku komplexních čísel klade daleko větší důraz než na gymnáziích - učitelé matematiky na to nejsou připraveni. Dokonce v době když jsem studoval se komplexní čísla probírala o rok dřív než na gymnáziích (ve druhém ročníku). Komplexní čísla se používají pro řešení střídavých obvodů jako tzv. fázory (amplituda a fáze). Pro konstatní kmitočet se zakresluje tzv. fázový diagram pro rozsah frekvencí se kreslí tzv. kmitočtové charakterisky. Běžně je známý záznam amplitudy v závislosti na kmitočtu tzv. frekvenční amplitudová charakteristika.
19.1.2006 19:40 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Docela maso je pak kreslit přenosovou char. do smithova diagramu: http://www.eecircle.com/applets/006/JSmith.html Mrkni i na to PDF tam (A color Smith Chart in PDF format)
19.1.2006 19:49 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
19.1.2006 19:50 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
19.1.2006 22:41 Jan Grmela | skóre: 45 | blog: Kilo šťávy z lachtana | Brno
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Jezis :-) Zlata Gaussova rovina nebo LAFCH&LFFCH... Asi ten, kdo vymysli osnovy, vi, proc se tohle nebere ;-)
19.1.2006 23:37 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Když jsem chodil na střední školu tak jsme to brali. Když se s tím naučíš tak to šetří opravdu hodně práce. Např. se v tom suprově dělá převrácená hodnota komplexního čísla (vztah mezi admitancí a impedancí) - obraz přes střed diagramu. Dá se tak určit stabilita obvodu apod. A když jsem pak studoval mikrovlnnou techniku na ČVUTu tak jsem pochopil, že bez toho by to vůbec nešlo. Pomocí tohoto diagramu se provádělo přizpůsobení vstupu a výstupu zes. Byl v podstatě implementovaný do programů.
Marek Bernát avatar 19.1.2006 23:43 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Tak to znie dobre. Píšem si mentálnu poznámku, že sa na to musím bližšie pozrieť.
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 23:55 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Marek Bernát avatar 19.1.2006 23:39 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Aha, nom, ehm, ... humus; hlavne to pdf :-)

A načo je akože dobré to kresliť? Dúfam, že to nie je len z dlhej chvíle :-)
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
19.1.2006 23:49 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Laicky řečeno to usnadňuje návrh vf obvodů: jako vstupní díly družicových přijímačů, umožňuje určovat stabilitu obvodů apod. Mrkni se na toto: impedance (mrkni i na anglickou verzi tak je obsáhlější) a všimni si, že impedance je komplexní číslo tj. bod v Gaussově rovině. A když se k tomu připočte, že je kmitočtově závislé tak z toho hned je křivka v této rovině. Toto se učí na střední škole ve 2. ročníku.
19.1.2006 23:41 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: komplexní a imaginární čísla
Ještě jsem si vzpomněl na jednu věc. Na vysoké škole jsme měli na PC implementovaný speciální soft - komplexní kalkulačku. Bylo to v roce 1992 :). A já sám jsem si koupil kalkulačku Casio s komplexníma číslama, protože to fakt šetřilo čas.
19.1.2006 11:50 trocha pravdy | skóre: 3 | blog: nic
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
Nechcete nekdo udelat serial o pyFLTK? Pouziva to nekdo u nas (krome me)?
20.1.2006 12:23 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Jenom Ty :-)

Ne vážně, jednu FLTK aplikaci mám a líbí se mi to. Je to minimalistický, funkční. Ne tak pěkný jak GTK+, ale co už...
Daniel Kvasnička ml. avatar 19.1.2006 12:58 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
mimochodem, myslim, ze v prvnim dile mohla byt alespon zminka o Eric3. Precejen je to IDE zalozene na PyQt, dobre s nim svazane a vubec si myslim, ze v prvnim dile se hodi predstavit nastroje, ktere muzou byt uzitecne a to Eric je. Takovy postreh jen...
FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
19.1.2006 14:28 machr
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
to by se to taky mohlo zvrhnout v serial o vi ;-)
Daniel Kvasnička ml. avatar 19.1.2006 16:43 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
ale houby :-) Eric ma odkaz i primo na homepage PyQt. Nerikam rozebirat kazdy IDE vhodny pro Python, ale tohle k PyQt proste patri, tak zminka na dva radky nezabije...
FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
19.1.2006 15:31 Astro | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin
Doufám, že nebudu působit dojmem hlupáka, když se na tohle zeptám :-) POkouším se nainstalovat na Ubuntu PyQT, ale uz u "python configure.py" to na mě vyplivne: Traceback (most recent call last): File "configure.py", line 31, in ? import sipconfig ImportError: No module named sipconfig přitom sip nainstalováno mám. Kdyžtak prosím nekamenovat :) a díky za radu :)
Nepropadejte panice
19.1.2006 16:13 Petr Mach
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Co jsem koukal, tak Ubuntu podporuje Python mimoradne dobre a ma pro nej spoustu balicku, proto doporucuji potrebne veci nainstalovat z pripravenych balicku, jestli existuji, coz povazuji za pravdepodobne.
Daniel Kvasnička ml. avatar 19.1.2006 16:38 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
ale spis co se tyka GTK+/Wx ...v repozitarich PyQt nemam a to jich mam v sources.list docela dost.
FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
Daniel Kvasnička ml. avatar 19.1.2006 16:46 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Ha! Omlouvam se, je to tam, jen to clovek nesmi hledat pod PyQt :-) Nahodte Synaptic a vyhledejte python-qt.
FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
19.1.2006 17:15 Astro | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
super, diky moc uz to slape :-)
Nepropadejte panice
19.1.2006 16:48 Astro | Praha
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
To je právě ono, v připravených balíčcích PyQt není
Nepropadejte panice
19.1.2006 16:49 Bones | skóre: 15 | blog:
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Odpovědět | Sbalit | Link | Blokovat | Admin

Skvely serial, chtel jsem se ucit PyQt ale zatim jsem se k tomu nejak nedostal az ted :-). Uz jsem pridal na nej odkaz na PyCZ Wiki.

Jeste se chci zeptat: kolik dilu planujete? Co vsechno hodlate probrat?

20.1.2006 06:07 hanzz | skóre: 19 | blog: hanzz
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)

Tak kolik dilu to nakonec bude nevim, ale ma idea je takova, ze tak do tretiho dilu bych se chtel u QT dostat k prvkum button, lineEdit, TextLabel. Samozrejme je vysvetleni signalu a slotu trosku do hloubky. V Pythonu se do tretiho dilu vysvetli tvorba vlastnich funkci a snad i trid, textovy vstup, podminky, cykly a mozna zvladnem jeste pokrocilou praci s poli :) Od tretiho dilu bych chtel, aby byla vysledkem kazdeho dilu nejaka pouzitelna aplikace. No a pri tvorbe te aplikace si pak vysvetlime nove prvky, ktere jsme pouzili. Nezavazuju se, ze tohle schema dodrzim :-), ale pokud to bude mozne, chtel bych, aby bylo takove.

Moc vsem dekuji za podporu ;-). Hodne me potesila reakce na clanek :-)

20.1.2006 15:53 Bones | skóre: 15 | blog:
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Rad bych se jeste zeptal v jakych casovych intervalech budou jednotlive dily vychazet?
20.1.2006 19:38 hanzz | skóre: 19 | blog: hanzz
Rozbalit Rozbalit vše Re: Python a PyQt - 1 (úvod)
Intervaly mezi clanky by mely byt tyden az dva tydny... Zalezi, jak budu behem tydne vytizeny :) Nebo jestli treba nepojedu na dovolenou :-)

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