Új hozzászólás Aktív témák
-
cousin333
addikt
-
cousin333
addikt
Nem ismerem a Tk-t. Viszont:
A Tkinter.Tk() osztálynak nincsen delete metódusa (azért akad ki). Van viszont deletecommand, meg destroy. Gondolom az utóbbi funkcionalitása kellene.
A justify attribútum a több soros szövegekre vonatkozik. Ami neked kell elvileg, az az anchor.
ui: Nem tudom, milyen szerkesztőt használsz, de a jobbak automatikus kiegészítése felajánlja egy adott objektumhoz a lehetséges attribútumok/metódusok listáját. Amit meg nem ad fel (lásd delete) az általában nincs is.
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
Szerintem a Spyder jó választás lenne, esetleg a PyCharm. Mindkettőben van konzol és kódszerkesztő egyaránt, és Linuxra is elérhetőek.
Egyelőre csak próbaként használtam gui könyvtárakat. Amire jelenleg nekem kell, arra az IPython Notebook is tökéletes - ami nem gui lib! -, érdemes megismerkedni vele. Ha egyszer továbblépnék a "rendes" GUI-k irányába, akkor valószínűleg a PyQt-t választanám a Qt Designerrel (bemutató). Ez egy drag-n-drop szerkesztő, az elmentett guit, meg pár sor kóddal betöltheted és használatba veheted. Esetleg kisebb, erre épülő könyvtárakat, mint a guiqwt.
Jelenleg Windows alatt a WinPython-t használom. Ez egy Python disztribúció, ami többek közt a fenti eszközöket integrálja magába. Mint a neve is mutatja, ez Windows only, de vannak más, cross-platform csomagok is, pl. Anaconda. De persze ez csak kényelmi lehetőség, a Python mellé egyenként is felteheted a csomagokat. A pip a te barátod.
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
Pedig szerintem érhetően leírja. A két import közti különbség:
from numpy import * # 1. megoldás
import numpy # 2. megoldásAz első esetben a teljes névtartományt (namespace-t) beimportálod és így írhatod például azt, hogy x = linspace(0, 10, 101)
A második esetben csak a modult töltöd be és ekkor azt kell írnod, hogy x = np.linspace(0, 10, 101)
Az első eset nyilván egyszerűbb, de nem elég kifejező. Ha van egy másik importált csomagod szintén egy linspace függvénnyel, akkor mi történik? Nyilván az utolsónak importált számít, de ezt egy másik felhasználó nem fogja tudni, mert nincs benne a kódban, hanem a pylab-bal lett beimportálva, ami "valamit még csinált".
A lényeg, hogy bizonyos szintaktikai egyszerűsítésekért cserébe összekuszálja a szálakat és feladja az egyértelműséget. ("Explicit is better than implicit.") Meg hogy jobban hasonlítson mondjuk a Matlab-ra. Én is mérnök vagyok, én sem akarom túlbonyolítani, de azért ennyi még belefér.
VI alatt mit értesz? Virtual instrument?
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
Nos, nem kell feltétlenül a repóban lennie:
Anaconda: Innen le tudod tölteni az sh kiterjesztésű fájlt. Ha most kezditek a pythonosdit, akkor szerintem a 3.4-es verziót használjátok (lásd az "I want Python 3.4" linket). Ha letöltötted, akkor parancssorból telepíted, az itt leírtak alapján. Ha lefutott, akkor a parancssorba beírva, hogy spyder már el is indul a Spyder.
Szintén parancssorba írva, hogy:
conda install numpy
már települ is a kérdéses csomag legfrissebb verziója a függőségeivel együtt.A GUI létrehozásához szerintem a Qt Designer egy jó választás, ha az iPython notebook - ami szintén feltelepül az Anacondával együtt - esetleg nem felel meg a célra. Telepítése parancssorból egyszerűen:
sudo apt-get install qt4-designerA QtDesigner-ben elkészíted a GUI-t majd elmented egy ui kiterjesztésű fájlba. Ezt aztán be tudod olvasni Pythonból ezen kód alapján.
ui: A fenti telepítési műveleteket sikeresen teszteltem Ubuntu 14.10-el. Egyébként Windows alatt használom a WinPython-t...
Remélem tudtam segíteni.
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
Milyen témára kéne elsősorban? Azaz mire szeretnéd használni? Léteznek általános célú könyvek, meg specifikusabb tematikájúak is. Attól is függ, milyen stílust szeretsz: ami jó alaposan körbejárja, a témát, vagy ami a második bekezdésben már webszerver kódot közöl.
Előbbire jó példa lehet a Mark Lutz féle Learning Python, ami elég alapos, helyenként talán túlságosan is. Vagy mondjuk a Think Python.
Utóbbiak sokan vannak, előbb szűkíteni kell a kört. Például Think DSP, az A Primer on Scientific Programming with Python vagy a Numerical Methods in Engineering With Python 3 esetleg a Python for Signal Processing. Ezeket kevéssé ismerem, de igényesnek tűnnek.
Mindezek az általános tudást alapozzák meg. Egyébként pedig meg kell ismerkedni a Python ökoszisztémával (pl. Spyder, PyCharm, Jupyter Notebook) és a hasznos modulokkal (pl. Numpy, Scipy, Sympy). Akkor pedig lehet olvasgatni ezek dokumentációját, az általában elég alapos és naprakész.
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
Mint a LabView?
Gondolom a virtuális műszer valami igazinak a leképezése lenne (multiméter, tápegység vezérlés, ilyenek). Nem tudom, meddig jutottál vele és milyen irányból közelítetted meg a témát.
Ami a modulokat illeti: pyvisa, pyserial, numpy, scipy, pandas, ilyesmi. Emellett érdemes megnézni a Qt Designer-t, amivel egyszerűen lehet felületeket kreálni (grafikusan). A WinPython-ban benne van minden.
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
Tehát az első mondatodban QT helyett Tk-t kell érteni?
A helyzet az, hogy a GUI egy olyan téma, amit én is kerülgetek, mint a forró kását. Inkább az egyszerűbb, "szkriptesebb" irányba mentem el, ami az IPython Notebook (újabb nevén Jupyter Notebook) használatát jelenti a klasszikus adatgyűjtés-feldolgozás-ábrázolás-mentés négyes mentén, változó sorrendben.
De terveim közt szerepel "rendes" GUI-k létrehozása is. Eddig arra jutottam, hogy Qt-t használok majd. Létezik hozzá egy Qt Designer nevű program, amivel a klasszikus drag'n'drop-pal tudod megtervezni a felületet (hasonlóan a LabView-höz vagy CVI-hoz). A program kimenete egy ui kiterjesztésű fájl. Ezt a Python programodba az alábbi kóddal - vagy ennek megfelelő módosításával - lehet beilleszteni (itt találtam):
import sys
from PyQt4 import QtGui, uic
class MyWindow(QtGui.QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
uic.loadUi('mywindow.ui', self)
self.show()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MyWindow()
sys.exit(app.exec_())Innentől az UI elemeit a Python kódból tudod piszkálni. A szokásos csúszkák, gombok, kapcsolók mellett az egyik ilyen lehetséges elem a Matplotlib widget, tehát tulajdonképpen egy grafikon felületet integrálhatsz az UI-ba.
A fenti módszert már kipróbáltam és működött, de élesben még nem használtam. A WinPython nevű Python disztribúcióban minden benne van, de pl a cross-platform Anaconda-ban is szinte minden, a Qt Designer meg egy külön telepíthető program.
Számomra a "végső megoldás" egy olyan program lehetne, amiben a GUI elemek mellett egy nagyobb szövegmezőbe érvényes Python kódot lehet írni és futtatni, ezáltal egyesíthetném a GUI-alapú előre megírt programok előnyeit egy Python-féle szkriptnyelv rugalmasságával.
[ Szerkesztve ]
"We spared no expense"
-
cousin333
addikt
A Qt egy C++ alapú keretrendszer GUI-k létrehozására. A Designer tudtommal az ő programjuk, így teljesen független a Pythontól.
Az Anaconda alapvetően egy jó disztribúció: tehát Python (2.7 vagy 3.5) + fejlesztőeszközök (pl. IPython, Spyder) + egy tonna külső fejlesztésű modul (numpy, scipy, matplotlib... stb.) vannak benne. Frissíteni, újat telepíteni meg a conda nevű, Linux csomagkezelőhöz hasonló programmal lehet.
Pl. telepítés:
conda install pyvisaMinden csomag frissítése:
conda update --allui: Az Anaconda elég nagy méretű, de van egy ún. Miniconda, ami csak az alapokat tartalmazza és a conda-t az esetleg hiányzó csomagok letöltéséhez.
"We spared no expense"
-
justmemory
senior tag
Szia,
szerintem próbálkozz a threading-el... Persze attól is függ, hogy mire szeretnéd használni, illetve szeretnél-e más feladatot is párhuzamosan végeztetni vele (a threading ez utóbbira használatos azzal, hogy persze nyilván tudod időzíteni)...
Egyébként ha mást nem, esetleg a sleep-nek lehet minden alkalommal paramétert adni, és akkor nem baj, hogy változik a "nem mindig ugyan olyan hosszu ideig tart, amit csinalni kell"[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
justmemory
senior tag
Ezt a
queue
modult nem használtam még, szóval nem tudok róla nyilatkozni...
Awhile
-t csak akkor használom, ha nagyon muszáj; ha van beépített modul athread
-ek közötti információcserére (pl.: aqueue
, ahogyan te is írod), valószínűleg jobb/hatékonyabb azt használni.--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
Pulsar
veterán
nekem
while
szépen megy Pi1-en, és nem öli meg. A végére vantime.sleep()
, így megoldva az időzítés. Kilépésre pedig egy file tartalmát olvasom, ami ha 0, akkor fut a ciklus tovább, ha 1 vagy nagyobb, akkor megszakad az első ciklus, és kilép a programból.[ Szerkesztve ]
-
Pulsar
veterán
Tread-et még nem csináltam. Vagyis ebben a formában nem. De kipróbálom Én két sql tábla tartalmát hasonlítom össze 5mp-enként, abból az egyik változik, a másik pedig a fix, amit keresek az elsők között. Illetve van egy harmadik tábla, ami szintén a végtelen ciklus megszakitására szolgál.
[ Szerkesztve ]
-
sonar
addikt
-
justmemory
senior tag
Én anno ezt találtam, nekem sokat segített, hátha jó lesz neked is, vagy ad ötletet (noha nem ismerem a programod mibenlétét).
sonar: sajnos nekem nincsen módom 3-asat használni, mert n900-ra 2.5 van alapból sajnos és a 2.7 sem igazán tökéletes és teljes... nem jó, de ez van... számítógépig meg nem jutok el, hogy azon próbáljak bármit is programozni, mert a gyerek kitúr...
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
sztanozs
veterán
A dekorátorok megváltoztatják a dekorált függvény működését (gyakorlatilag becsomagolják egy másik függvénybe, ami
- képes megváltoztatni a dekorált függvény működését, az ott meghívott függvények vagy a változók átalakításával (felüldefiniálásával)
- ellenőrizheti vagy logolhatja az átadott vagy visszaadott argumentumokat[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Dekorátor pl a input függvény felülírására:
Az első függvény (mock-olt) nem fog bekérni semmit a konzolon, fixen megkapja a test input lista sorait, de a második igen.from unittest import mock
from typing import Callable
test_inputs = [
"line 1",
"line 2",
"line 3"]
@mock.patch('builtins.input', side_effect=test_inputs)
def letme_test_it(input: Callable) -> None:
i1, i2, i3 = input(), input(), input()
print(i1, i2, i3)
def letme_provide_input():
i1, i2, i3 = input(), input(), input()
print(i1, i2, i3)
if __name__ == '__main__':
letme_test_it()
letme_provide_input()[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Dekorátorban könnyű megvalósítani olyan dolgokat, amiket függvényen belül plusz hívásokkal tudnál csak megoldani. Ráadásul szebben újrahasználható, mintha a függvényen belül helyeznénk el, pl.:
class User:
...
def authenticate(self, username, password):
...
#bejelentkezik
@is_authenticated
def change_password(self):
...
#jelszót vált
@is_authenticated
@is_admin
def change_password_for_others(self, user):
...
#jelszót vált másik usernélvagy pl logolási szinteket adhatunk meg fv hívásoknak és a konfigurációban beállított logolási szintnek megfelelően lesz (vagy nem lesz) logolva az adott esemény:
class User:
...
@log(loglevel=1)
def authenticate(self, username, password):
...
#bejelentkezik
@log(loglevel=1)
@is_authenticated
def change_password(self):
...
#jelszót vált
@log(loglevel=2)
@is_authenticated
@is_admin
def change_password_for_others(self, user):
...
#jelszót vált másik usernél[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
justmemory
senior tag
Én nagyon régen magamnak gtk-ban csináltam, de van esetleg még PyQt, ami talán populárisabb, de ezt nem tudom, nem követem már, biztosan van más is.
Itt pedig - példaképpen - egy python navigáló, ami Qt-t használ. Nem tudom mennyire 2020...[ Szerkesztve ]
--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---
-
sztanozs
veterán
Ha már GUI, akkor inkább érdemes volna egy webgui-t összedobni, arra biztos vannak csodaszép framework-ök.
#3208 - JoinR: Mondjuk ez tényleg csecse...
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Siriusb
veterán
Én jobbára a GTK-s pygobject-et használom, de idén tettem egy kitérőt a pyqt felé (már 6-os verzió is van belőle), ami abból a szempontból jó, hogy az utóbbi években KDE-t használok így teljesen a rendszer témáját felvéve vizuálisan beleillik a környezetbe. Nem is nehéz használni, igazából én csak egy dologgal akadtam el benne, amikor táblázatban egy oszlopba akartam megjeleníteni több oszlop tartalmát. Na, a delegate működését valahogy nem tudtam még megérteni.
Ez a kettő azért jó, mert rengeteg kész megoldás van, amit csak használnod kell és nem neked kell implementálnod az adott funkciót.
A wxWidget is jó, de az nem "önálló" (ha szabad így mondanom), hanem GTK is kell hozzá.És amint azt az előttem szólok is mondták, webgui, nem is régen pont volt szó itt erről, ezt még én is ki akarom próbálni. Html+css, tényleg tudod csicsázni a kinézetet.
Kíváncsi vagyok, mit sikerül ügyeskedned, ha lesz kedved, majd megmutathatnád egy-két kép erejéig. -
-
-
-
sztanozs
veterán
Visual Studiora (nem Code) gondoltam - de látom, hogy linuxot használsz, szóval asszem oda felejtős.
Amúgy nem értem mi ez a para a venv-től?
Csak annyit csinál, hogy nem a globális csomagtárt szemeteled tele a különböző dependenciákkal, hanem projektenként van egy saját csomagtár, amit használni tudsz. Persze ez azt is jelenti, hogy az adott projekthez mindig le kell húzni újra az összes csomagot, amire szükséged van. De azért ez nem lehet akkora probléma, vagy...?JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Gondolom mert a tkinternek vannak OS dependenciái, és a dependenciák frissítése elcseszi a csomagot. Két lehetőség van a megoldásra (kb 2 perc google után):
1. rendszercsomagok közé feltelepíteni a TKinter-t és a venv-et a --system-site-packages kapcsolóval létrehozni (ven ennek megfelelő UI kapcsolója PyCharm-ban)
2. módosítani a venv futtatót, hogy a TKinter foldert adja hozzá a referenciákhoz: [link]JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Projektet kétféleképp lehet létrehozni PyCharmban:
- New Environment
-> itt a TKinternek mindenféleképp kell valami külön machináció, kivéve, ha bekattintod az [Inherit global site-packages] opciót
- Previously configured interpreter
-> itt megadhatsz egy korábban már bekonfigurált VENV-et (ha publikussá tetted korábban), de akár az alap interpretert is (ezzel vsz nem lesz gondod)Ha módosítani akarod a venv környezetet, akkor a
projekt\venv\Scripts\
könyvtárban azactivate.*
fájlokat kell szerkeszteni (OS-től függően).[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
raadasul osszetettebben is lehet hasznalni:
pos = [(x,y) for x in range(10) for y in range(10)]
vagy az elozo pelda alapjan:
from random import randint
harommal_oszthato = [i for i in [randint(1,12) for i in range(20)] if i%3 == 0][ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
axioma
veterán
De hasznos, nem csak azert mert kevesebb kodsor, hanem atlathatobb es kesobb ma'r lesz majd hogy a listat se allitod elo [tarolod le] ha utana csak 1x vegigmesz rajta, hanem a generalas on the fly tortenik mikor felhasznalod egy kovetkezo lepes inputjakent. Szoval erdemes annyit probalkozni vele, hogy megszokd ezt a fajta irasmodot.
[Az a 'ternary' megvalositasa ami ertheto ugyan de elter mas programnyelvek logikajatol es nem 'prefix(ertelmezes)-mentes' :a=b if c>0 else d
, de ezzel kb. lattad a furasagokat.] -
cousin333
addikt
Ez a gyakran előforduló alap szituáció, ami egy lista (tágabban: egy iterálható objektum) elemein hajtja végre ugyanazt a függvényt:
lista = []
for elem in elemek:
lista.append(func(elem))
A func() függvényhívásnak ott kell lennie különben egyszerűen csak átmásolnád a listát. Ugyanez rövidebben ún. list comprehension-nel:
lista = [func(elem) for elem in elemek]
Gyakorlatilag a for ciklus belsejét kihoztuk az elejére, elhagytuk az append-et, és az egészből egy egysoros értékadást csináltunk. Az extra [] tulajdonképpen egy "konstruktor", egy "syntactic sugar" (van erre magyar kifejezés?), ami azt mondja, hogy az eredményt listába szeretném rendezni. Írhattam volna ezt is:
lista = list(func(elem) for elem in elemek)
A [] helyett írhatnék mást is, a szándéktól függően: a {} például - kicsit más szintaxis mellett - egy szótárat (dictionary) hozna létre, míg a () egy generátor kifejezést. Ami egyébként megegyezik a fenti példával, csak a list függvény nélkül. Mint látható, Pythonban az egyes szintaktikai elemek ebben az esetben (is) nagyon szépen egymásra épülnek.
Namost az if kifejezés a fentieknek egy speciális esete: nem akarunk minden elemet felhasználni, csak azokat, amik egy bizonyos feltételnek megfelelnek. Mivel ez egy extra, opcionális eset, logikus, hogy a kifejezés végére kerül, ha egyáltalán szerepel:
lista = [func(elem) for elem in elemek if not elem % 3]
Ugyanígy működik a feltételes értékadás is, amit axioma is írt, ami mondjuk C-ben az x = (a) ? m : n.
Pythonban pedig:
x = m if a else n
Ha nem lenne feltétel, akkor csak simán ezt írnánk:
x = m
Látható, hogy a feltételes és feltétel nélküli értékadás ugyanúgy kezdődik, csak előbbi a feltétellel folytatódik.
[ Szerkesztve ]
"We spared no expense"
-
sztanozs
veterán
Nem osztalyvaltozokent hoztad letre, hanme globalis valtozonak. Vagy hozd letre self.powerSupplyDrop-kent vagy hivatkozz ra ugy hogy kitorlod a self. Reszt.
amugy ez nem egy dropdown, hanem egy combobox.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
oh, most latom, hogy a kodban nem azt raktad global-ra hanem a powerSuplyPort-ot.
Mindenhol rakd bele az osztaly scope-jaba, ogy lesz a legegyszerubb:
sima powerSuplyDrop helyett mindenhol self.powerSuplyDrop-ot hasznalj (a definicional is).
mobilon nem egyszeru forumozni[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Új hozzászólás Aktív témák
- Vallás
- Van, amit nehéz lett megtalálni a Google keresőjével
- Trollok komolyan
- Honor Magic5 Pro - kamerák bűvöletében
- Apple iPhone 13 - hízott, de jól áll neki!
- Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
- Soundbar, soundplate, hangprojektor
- Samsung Galaxy A54 - türelemjáték
- Sorozatok
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- További aktív témák...