Hirdetés

2024. május 2., csütörtök

Gyorskeresés

Hozzászólások

(#1851) cigam válasza maser (#1850) üzenetére


cigam
félisten

Csak nem tudja mijaza BeautifulSoup4 és python-hoz se konyít, merthogy akkor megcsinálta volna magának. Tippem szerint frissült az oldal, és a régi program már nem tud vele mit kezdeni. Abban kér segítséget, hogy - akitöl a kód nem szivárog ki - segítsen az új oldalhoz hozzáfaragni a régi programot.

Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews

(#1852) Neoteric válasza cigam (#1851) üzenetére


Neoteric
addikt

Fejen talaltad a szoget. Sonar forumtars megoldotta a dolgot, ugyhogy ezuton is koszonom, problem solved. :R

PSN: ne0teric_sAN

(#1853) AeSDé Team


AeSDé Team
őstag

Sziasztok!

Készítenem kell egy Python alkalmazást Linux platformra, amely röviden a következő koncepciókat foglalja majd magában:
- több panelből álló grafikus interfész
- eseményvezérelt logika, mely mind az interfész, mind pedig soros-porton érkező bemenetekre képes reagálni
- több felhasználó munkájának asszinkron követése

Valaki tud olyan kurzust, oldalt, irodalmat ajánlani, ahol arról regélnek, hogy hogyan lehet jól strukturáltan létrehozni egy ilyen komplexitású, grafikus interfészt is tartalmazó projektet?
Nem egészen tiszta számomra, hogy hogyan is kellene megvalósítanom Pythonban egy MVC dizájnt, hogyan szeparálom a kódomat több fájlba az importok teljes összekavarodása nélkül, és hogyan fogom a GUI-tól független szálon csekkolgatni az egyéb folyamatokat.

Nem új számomra a koncepció, írtam már Java-ban, C#-ban hasonlóan bonyolult grafikus alkalmazást, viszont szükségem lenne egy kis útmutatásra hogy hogyan valósíthatom meg ezt a dizájnt Python-ban.

(#1855) Siriusb válasza AeSDé Team (#1853) üzenetére


Siriusb
veterán

Részemről most vettem fel ismét a python fonalat pár évvel ezelőttről, úgyhogy rengeteget bújom a doksikat, különösen a GTK3-t, mert most grafikus felületet is készítek. :D

Úgy vettem ki a szavaidból, nem mélyedtél még el különösebben a python-ban, ha a modulok importálása sem tiszta. Esetleg itt érdemes kezdeni: https://docs.python.org/3/tutorial/modules.html
Egy példa: ha regex-et akarsz használni, beimportálod a modult, és a modul nevével tudod meghívni az adott eljárásokat:
import re
nezd_mit_talaltam = re.search("^eztkeresem", ebben_keresem)
Így konkrétan tudsz hivatkozni a modulban található kódra, nincs összeakadás, ha más modul is használná ugyanazokat az elnevezéseket.

Pl. amit most írtam, abban így néz ki az import:
import pdftotext
import re
import os
from email import generator
from email.message import EmailMessage
from email.headerregistry import Address
import mimetypes
Így szépen használni a prefix-eket, és jobban olvasható:
cwd = os.getcwd()
vagy
flags=re.IGNORECASE

Azt is el kéne dönteni, milyen GUI-t akarsz használni. Nem mindegy, mert esetleg egy tkinter-ben neked kell lekódolnod olyan dolgokat, amiket egy komplexebb felülettel készen kapsz, ami ráadásul még jól integrálódik a környezetbe.

(#1856) Siriusb


Siriusb
veterán

ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ, mit szívtam.
Sqltite3 date converter-t akarom használni. Beírom:
'SELECT datum AS "dateofrecording [date]" FROM meter'
erre hibával elszáll: sqlite3.OperationalError: no such column: blabla

Python doksiban van egy példakód, végén kínomban már lementettem és lefuttattam, simán ment. Még jobban nem értettem, mi a baj.

Végső próbálkozásként átírtam a virtuális oszlopnevet (datum) a példában szereplő current_date-re, és így működik. :W Ha agyonütnek sem jövök rá erre...

(#1857) kovisoft válasza Siriusb (#1856) üzenetére


kovisoft
őstag

Lehet, hogy így működik, csak nem azt fogja csinálni, amit szeretnél, ha a táblában szereplő dátum helyett a current_date van a lekérdezésben.

(#1858) sztanozs válasza Siriusb (#1856) üzenetére


sztanozs
veterán

Gondolom mivel a meter táblázatodban nincs datum nevű oszlop, így azt nem is találja meg.
hogy néz ki meter nevű táblázat (hogy jött létre az a tábla)?

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...

(#1859) Siriusb válasza sztanozs (#1858) üzenetére


Siriusb
veterán

Persze, hogy nincs benne datum nevű oszlop, mert az csak alias, a valódi oszlop dateofrecording névre hallgat..

A problémám lényege az volt, hogy az alias csak "current_date" név lehet (hiába találtam ki a "datum" fantázianevet), ugye ez hivatkozik a valódi, a táblában megtalálható "dateofrecording" nevű oszlopra a konverter szintaktikájában:
datum AS "dateofrecording [date]"
alias AS "oszlopnév [adattípus]"

azaz a konverter megkapja a mező nevét a táblából "dateofrecording", valamint hogy milyen típusra konvertálja a tartalmát a lekérdezéskor: [date], de a hivatkozási név nem lehet "datum" vagy bármi más, csak és kizárólag a "current_date" név megadásával hajlandó működni a konverter.
Ez nem olyan nagy baj, csak lenne leírva. :D
Mert ebből nem derült ki számomra:

sqlite3.PARSE_COLNAMES
This constant is meant to be used with the detect_types parameter of the connect() function.
Setting this makes the SQLite interface parse the column name for each column it returns. It will look for a string formed [mytype] in there, and then decide that ‘mytype’ is the type of the column. It will try to find an entry of ‘mytype’ in the converters dictionary and then use the converter function found there to return the value. The column name found in Cursor.description is only the first word of the column name, i. e. if you use something like 'as "x [datetime]"' in your SQL, then we will parse out everything until the first blank for the column name: the column name would simply be “x”.

https://docs.python.org/3/library/sqlite3.html

(#1860) kovisoft válasza Siriusb (#1859) üzenetére


kovisoft
őstag

Fölcserélted az oszlopot és az aliast. Az alias az AS után jön.

Szerk: vagy pedig nem ismerem ezt a konverzió dolgot. :D

[ Szerkesztve ]

(#1861) kovisoft válasza kovisoft (#1860) üzenetére


kovisoft
őstag

Most így gyorsan átfutva a linkelt doksit, mégiscsak jól gondoltam: az AS elé kell írnod az oszlopnevedet (vagy egy kifejezést), az AS után az aliast plusz a konverziós típust.

(#1862) Siriusb válasza kovisoft (#1861) üzenetére


Siriusb
veterán

Igazad van! :R

viszont a doksiban rosszul van a példa, én meg leragadtam annál, mert logikusnak tűnt a szintaktika. :DDD

import sqlite3
import datetime
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
cur = con.cursor()
cur.execute("create table test(d date, ts timestamp)")
today = datetime.date.today()
now = datetime.datetime.now()
cur.execute("insert into test(d, ts) values (?, ?)", (today, now))
cur.execute("select d, ts from test")
row = cur.fetchone()
print(today, "=>", row[0], type(row[0]))
print(now, "=>", row[1], type(row[1]))
cur.execute('select current_date as "d [date]", current_timestamp as "ts [timestamp]"')
row = cur.fetchone()
print("current_date", row[0], type(row[0]))
print("current_timestamp", row[1], type(row[1]))

Nézd már meg légyszíves, ebben a mintapéldában tényleg fordítva van megadva (és mégis működik), vagy én nézek félre valamit (ami könnyen megeshet :) ) ?

(#1863) kovisoft válasza Siriusb (#1862) üzenetére


kovisoft
őstag

A példában az a rész nem a táblából szelektál, hanem szimplán az aktuális dátumot konvertálja. Nincs is "from" a select-ben. Az zavarhatott meg, hogy ugyanazokat a neveket adta az aliasoknak, mint ahogy az előtte létrehozott tábla oszlopait is hívják.

(#1865) Siriusb válasza s1999xx (#1864) üzenetére


Siriusb
veterán

Köszi a segítséget mindenkinek!
Minden egyszerre nem megy, sajnos minden szempontból hiányos a tudásom. :(

(#1863) kovisoft
Igen, az zavart meg. Máskor alaposabban kell olvasnom.
Köszi!

(#1867) kovisoft válasza s1999xx (#1866) üzenetére


kovisoft
őstag

Az eval() nagyon veszélyes, csak úgy szabad használni, ha teljes kontrollunk van a neki átadott string felett. Unit teszteknél lehet pl. arra használni, hogy kiértékeljük a tesztelendõ függvényeinket.

(#1868) velizare válasza s1999xx (#1866) üzenetére


velizare
nagyúr

pl. van egy python frameworköd, amiben emberek írnak futtatható scripteket. valahogy át kell fordítanod az inputjaikat kóddá.

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#1870) kovisoft válasza s1999xx (#1869) üzenetére


kovisoft
őstag

Nem azt mondom, hogy eval-t kell használni unit teszthez, csak annyit, hogy láttam már olyat, ahol használják. Pl. ha nem elég az, amit a standard assert biztosít, ezért egy saját assert változatot akar csinálni az ember, akkor annak a belsejében a saját assertnek átadott kifejezések kiértékeléséhez kellhet az eval. Ami hirtelen eszembe jut: ha olyan függvényeket tesztelek, amik maguk is AssertionError-t dobnak, és meg akarom különböztetni ezt a unit teszt AssertionError-jától.

(#1871) Siriusb


Siriusb
veterán

pyGTK TreeView-ban valaki otthon van?
Szerintem már nem látom a fától az erdőt, kellene egy kis lökés. :)

Amennyiben nem csak egy kifejezett oszlopot, hanem mondjuk ötöt teszek szerkeszthetővé egyszerre (mintha egy excel táblában lennénk), akkor miként tárolom el a megváltoztatott értéket a modelben (ListStore)?
Tehát meg van jelenítve a táblázat, s a Szerkesztés gomb meghívja a következőt:
def edit_selected(self, widget):
if self._select.get_selected()[1] is None: #treeiter is None
self._tree.set_cursor(Gtk.TreePath(0), self._tree.get_columns()[0], True)
for k,renderer in self._renderers.items(): # All renderers of the columns
renderer.set_property("editable", True)
renderer.connect("edited", self.text_edited)

És ezután hogyan tároljam el az új értéket (new_text) ?:

def text_edited(self, widget, path, new_text):
   pass

(#1872) Siriusb válasza Siriusb (#1871) üzenetére


Siriusb
veterán

Közben amint leírtam a kérdést eszembe jutott kétféle megoldás is, működik is, de elég gányolás. :D
Egyszóval egy "hivatalos" verziót azért megköszönnék. :)

(#1873) velizare válasza s1999xx (#1869) üzenetére


velizare
nagyúr

nézz meg pl. egy robot frameworköt. ez egy python alapú framework, tesztautomatizálásra használják. azaz emberek arra használják, hogy egy programot írjanak benne, ezzel tesztelik azt a programot, amit le akarnak tesztelni. azaz abból a pszeudókódból, amit a felhasználó begépel, python programot kell csinálni.

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#1874) kovisoft válasza Siriusb (#1871) üzenetére


kovisoft
őstag

Egy lehetőség, talán működik: A renderer.connect() híváshoz plusz paraméterként tudsz user_param-okat hozzárendelni. Ezt használhatod pl. az oszlop sorszámának megadására, és ezt meg fogja kapni a text_edited() egy plusz user_param paraméterben. A path megmondja, hogy melyik sorban van a módosított cella, a user_param pedig megadja az oszlop számát.

Valami ilyesmire gondolok (tegyük fel, hogy a liststore el van tárolva egy memberváltozóban, de akár ezt is át lehet adni user_param-ként):

def edit_selected(self, widget):
...
column = ...
  renderer.connect("edited", self.text_edited, column)

def text_edited(self, widget, path, new_text, user_param):
  self.liststore[path][user_param] = new_text

(#1875) cousin333 válasza s1999xx (#1869) üzenetére


cousin333
addikt

Egy ötlet: készítesz egy általános jellegű GUI-t. Mondjuk van benne egy nagyobb szövegmező egy vászon, amire grafikont lehet rajzolni, néhány gomb, tekerő, csúszka... stb.

A lényeg, hogy a szövegmezőbe lehet Python kódot beírni (vagy fájlból betölteni), amit aztán futtatni tudsz. Ehhez kell az eval(), így a kód használhatja GUI elemeket is, például függvényt rajzolhat, vagy feldolgozhat egy másik mezővel, gombbal betöltött adatfájlt.

A lényeg, hogy a Python egy szkriptnyelv, aminek egyik előnye, hogy nem kell előre megírni a teljes kódot, hanem dinamikusan futtathatod. A fenti példa tulajdonképpen egy tuningolt parancssornak is tekinthető.

UI: a Robot Framework nem tudom, mennyire jó példa. Annak pont az a lényege, hogy a tesztet nem Pythonban írod meg, hanem egy - szerintük - egyszerűbb leíró nyelvvel amit a framework aztán értelmez.

[ Szerkesztve ]

"We spared no expense"

(#1878) cousin333 válasza s1999xx (#1877) üzenetére


cousin333
addikt

Valóban, ezt a példámban én is rosszul írtam. Bár ha az eval() a főgonosz, akkor az exec() maga az ördög... :)

[ Szerkesztve ]

"We spared no expense"

(#1879) cousin333 válasza s1999xx (#1876) üzenetére


cousin333
addikt

A fájlból azért nem szerencsés az import-tal beolvasni, mert a fájl tartalma kell, hogy a mezőben szerepeljen (legalábbis az én elképzelésem szerint). Ennek az az értelme, hogy a felhasználó is látja a szkriptet, sőt, apróbb módosításokat is tud rajta végezni. Persze ehhez az sem árt, ha már előzetesen beimportáltunk mindenféle segédfüggvényeket, hogy ez a szkript már rövid és lényegre törő lehessen.

Működését tekintve hasonlítana mondjuk a Robot Framework megoldásához, csak itt nem kell teljesen feleslegesen egy külön leírónyelvet elsajátítani, mehet minden Pythonban.

Ez az ötlet mérés-adatgyűjtés területén merült fel bennem. A "rendes" GUI-s programok ugyanis általában jól működnek, amíg pontosan úgy használják őket, ahogy a fejlesztők megálmodták. De ha már nem pont azt és nem pont úgy kell, akkor jönnek a problémák, míg a fenti exec-es megoldás sokkal rugalmasabb lehet.

[ Szerkesztve ]

"We spared no expense"

(#1880) KEAN


KEAN
tag

Hmm... A fenti dolgok kicsit elgondolkodtattak.

Vannak ezek a programozás tanulós oldalak, ahol van valami feladat, a felhasználó beírja a kis kódját, aztán egy gombnyomásra le lehet futtatni a scriptet és kiírja az eredményt vagy hiba esetén a stack tracet.
Kipróbáltam, simán tudtam a kérdéses feladattól teljesen független kódot is írni, fájlt létrehozni, os modullal garázdálkodni, stb, stb. :)
Kíváncsi vagyok meddig lehet elmenni, bár ideális esetben ezek a környezetek valami elszigetelt konténerben futnak gondolom.

"Persze, hogy tudtam, csak nem sejtettem!"

(#1881) Siriusb válasza kovisoft (#1874) üzenetére


Siriusb
veterán

Köszi a választ! :R

(#1882) peter1998


peter1998
tag

Sziasztok.
Olyan kérdésem lenne hogy azt hogyan lehet megoldani hogy egy fájl 12.-sorát olvassam be.Jelenleg ez a kódom.

f = open("asd.txt", "r")
akksi_toltottseg = f.readline()
print(akksi_toltottseg())

(#1883) kovisoft válasza peter1998 (#1882) üzenetére


kovisoft
őstag

Ha nem nagyon nagy a file, akkor a legegyszerűbb, ha a readlines()-szal beolvastatod az egész file-t egy listába, és annak a 11. indexű elemét (a 0. index az 1. sor) használod, valahogy így:

f = open("asd.txt", "r")
lines=f.readlines()
print(lines[11])

(#1884) peter1998 válasza kovisoft (#1883) üzenetére


peter1998
tag

Köszi szépen.Végül ez lett a kód.
#fajl beolvasas
f = open("asd.txt", "r")
lines=f.readlines()
#beolvastam a fajlt

#akksi toltottsege
akksi_toltottsege = lines[0]
form_akksi_toltottsege = akksi_toltottsege[16:19]
#---------------------------
akksi_feszultseg = lines[1]
form_akksi_feszultseg = akksi_feszultseg[17:22]
#---------------------------
bejovo_feszultseg = lines[15]
form_bejov_feszultseg = bejovo_feszultseg[15:20]
#---------------------------
#fajl bezarasa
f.close()

(#1885) Wmwinters01


Wmwinters01
tag

Sziasztok,
Pár tanácsért jöttem. Ahogy olvasom a fórumot, azért itt programozásban elég jártas emberek fordulnak meg.
Az lenne a kérdésem, hogy érdemes elkezdeni megtanulni programozni Pythonban, ha nincs semmilyen ismeretem a többi program nyelvhez sem?
Igazából érdekel a programozás és ahogy eddig olvastam elég sokat tudna a munkában segíteni. Meg hát nem baj ha az ember ezt is elsajátítja.. :U

Előre köszönöm a válaszokat és bocs a off-ért. :R

I`m not afraid to die, I just don`t want to be there when it happens.

(#1887) kovisoft válasza Wmwinters01 (#1885) üzenetére


kovisoft
őstag

A python nagyon jó első nyelvnek, mert könnyen tanulható. És nem minden nyelven ugyanakkora erőfeszítés programozni tanulni.

(#1888) Wmwinters01 válasza s1999xx (#1886) üzenetére


Wmwinters01
tag

Az angol folyamatos tanulásban van... sajnos még a német oldalon indultam, de a szakterülethez meg minden máshoz az angol kell, szóval az is fejlődő szinten van -nem szokott ártani ha angol fórumokat, doksikat kell olvasni :D -

Köszönöm a tippet, akkor átrágom magam oda és mentem a későbbiekre :) :R

I`m not afraid to die, I just don`t want to be there when it happens.

(#1889) Siriusb válasza Wmwinters01 (#1888) üzenetére


Siriusb
veterán

Csatlakozom az előttem szólókhoz, elég könnyű elsajátítani az alapokat, nagyon kényelmes a használata, bár el kell sajátítani hozzá a "pitonikus" gondolkodást, hogy tényleg szép és a nyelvhez illő legyen a kódod. :)

Kíváncsiságból szondáznám én is a nagyérdeműt (ha van kedvetek hozzá):
1.) Milyen GUI-t részesítetek előnyben? (Pl. GTK, mert a KDE (Qt) kiakaszt. :D )
2.) Milyen IDE-t használtok (ingyenes)? (Eclipse + PyDev)

(#1890) axioma válasza Siriusb (#1889) üzenetére


axioma
veterán

1. not applicable, nem gui-zok pythonnal
2. pycharm (egyszer probalkoztam Canopy-val mert gyenge gepem volt, annal mar a notepad++ is majdnem jobb)

(#1891) kovisoft válasza Siriusb (#1889) üzenetére


kovisoft
őstag

1. Én sem gui-zok pythonnal (sőt leginkább mással sem)
2. Őskövület vagyok: vim-et használok ctags-szel (egérhez, kurzorbillentyűkhöz nem nyúlok, csak ha nagyon muszáj).

(#1892) justmemory válasza Siriusb (#1889) üzenetére


justmemory
senior tag

Szia,

1. én a telómra írok programokat (Nokia n900) - ez be is határolja a GUI-t: GTK (illetve az abból eredő Hildon); lehetne Qt-t is használni, de annak még nem ugrottam neki.
2. Én nem használok IDE-t; vagy iPython-ban próbálok ki pár dolgot, vagy simán Vim/NeoVim-el megírom, aztán futtatom.

--- Imprisoned, inside this mind... --- Joined at the soul with a pair of headphones ---

(#1893) KEAN válasza Siriusb (#1889) üzenetére


KEAN
tag

1.) Munkából kifolyólag wxPython volt jó pár éven keresztül, most leginkább semmi, de hobbiból azért a PyQt5-öt gyakorolgatom.
2.) Eclipse + PyDev vagy 6-7 éven keresztül, aztán váltottam PyCharm-ra.

"Persze, hogy tudtam, csak nem sejtettem!"

(#1895) Vesporigo válasza Siriusb (#1889) üzenetére


Vesporigo
aktív tag

1. Még nem gui-zok.
2. PyCharm, nekem nagyon bejött.

(#1896) velizare válasza Siriusb (#1889) üzenetére


velizare
nagyúr

1, plain text
2, pycharm community edition. munkához is használható (sőt, még forkolhatod is az apache 2.0 liszensz miatt).

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#1897) Siriusb


Siriusb
veterán

Köszönöm mindenkinek a válaszokat! :R

Hehe, pár script nekem is megy GUI nélkül, de azért vannak olyan dolgok, amikhez célszerűbb (nekem) a GUI.

Vim-et én is szeretem, bár python-hoz még sosem használtam. Pycharm-ot kipróbálom, ha már így bejön többeknek. :)

(#1898) sh4d0w válasza Wmwinters01 (#1885) üzenetére


sh4d0w
nagyúr
LOGOUT blog

coursera. org-on van egy Programming for everyone kurzus, semmiféle elözetes peogramozói tudás nem kell hozzá.

https://www.coreinfinity.tech

(#1899) Vesporigo válasza sh4d0w (#1898) üzenetére


Vesporigo
aktív tag

Ezt a kurzust én is csak ajánlani tudom, a Python for Everybody Specialisation első része. Nagyon érthetően magyaráz Dr. Chuck (természetesen angolul) A Python for Everybody Specialisation első 3 részét megcsináltam kb 1 hónap alatt (ha nagyon ráfekszik az ember, fele ennyi idő is elég):
- Programming for Everybody (Getting Started with Python)
- Python Data Structures
- Using Python to Access Web Data

A 4.rész, a Using Databases with Python már kifogott rajtam, ezt egyelőre hanyagolom, mert az SQL tudásom kissé megkopott, szóval azt kell most felelevenítenem.

Érdekes gyakorlatokat ad minden fejezet végén, néha kicsit böngészni kell a netet, vagy kis segítséget kérni, de nem lehetetlen. Engem teljesen lekötött a kurzus.

(#1900) Siriusb válasza Siriusb (#1897) üzenetére


Siriusb
veterán

Nem is olyan rossz a pycharm. :K

(#1894) s1999xx
Én sem értem, miért a tkinter-t rakták be alapnak. Mondjuk a python3-hoz sokáig nem volt wxWidget, ha jól emlékszem, azonban sokak örültek volna, ha ezzel szállítják a python3-t. :)

A GTK3 elég jól dokumentált, bár őszintén szólva néha elveszek benne, amikor már nem tudom, egy adott osztály éppen mit és honnan örökölt. Vagy éppen amit próbálok fabrikálni, az gyárilag benne van, amire egy idő után rátalálok. :D

Copyright © 2000-2024 PROHARDVER Informatikai Kft.