Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Python => Konuyu başlatan: z - 25 Nisan 2020, 11:30:48

Başlık: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 11:30:48
x=math.trunc(Current*255/2000)

islemini yapmak isin tepeye

import math satirini ekledim.

Buna ragmen NameError: name 'math' is not defined hatasi aliyorum.

Internetteki orneklerde hep import math denmis.

from math import * satiri da ise yaramadi.

Bu hatanin sebebi nedir?

Bir de renklendirme de asagidaki gibi.

from tkinter import *
from math import *

Gri renklendirme satirlarini sorun var diye mi anlamaliyim?


Başlık: Ynt: Aceminin python sorulari
Gönderen: fide - 25 Nisan 2020, 12:06:32
math.trunc() yerine şunu deneyin
from math import trunc
Altta da trunc() olarak deneyin.

Mantığı tam anlamış değilim ama bazen böyle çalışıyor.
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 12:36:58
Bu kez de hata mesaji: NameError: name 'trunc' is not defined

import satirini etkisiz hale getirirsem de ayni hatayi veriyor.

#from math import trunc
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 12:58:36
PC'deki math.py dosyasini bulup icine baktim.

trunc diye bir fonksiyon yok. Dosyanin icinde cok az fonksiyon var.  sin, cos log bakindim onlari da goremedim.
Gerci math.py icinde import satiri var. O da bir yerlerden bir seyleri import ediyor ama neler oldugunu takip edemedim.

from math import yazip trunc yazmak icin t harfine bastigimda tablo icinde trunc tan tanh tau fonksiyonlari cikiyor.
Bu esnada kavunici ve siyah renkli olan from math import satiri trunc seciminden sonra gri renge donuyor.

Ben acemiyim de bu pythonu yazanlar da acemi galiba. Adam iki satir hata mesaji verir su su sebepten dolayi sorun var der.

Gicik oldum.
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 13:42:57
math i import edip icinden matematik fonksiyonu cagirabilen varmi?

Acaip bir teslik var bu iste.

Googledan da pek cok kisinin basi math ile dertli gorunuyor.

Başlık: Ynt: Aceminin python sorulari
Gönderen: CaFFeiNe - 25 Nisan 2020, 13:55:04
bende import math çalıştı, from mart import * çalışmadı, en alt resimde çalışıyor gibi göründüğüne bakmayın from math import * yazdıktan sonra çalıştıra basmadım öncekinin çıktısı var aşağıda


(https://i.hizliresim.com/pB8E80.jpg) (https://hizliresim.com/pB8E80)

(https://i.hizliresim.com/CeAxyP.jpg) (https://hizliresim.com/CeAxyP)

(https://i.hizliresim.com/T48BVH.jpg) (https://hizliresim.com/T48BVH)
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 14:08:20
Mumkunse bir de fonksiyon icinde deneyebilirmisiniz?

Mesela

def AAA(Data):
    print(math.trunc(Data*255/2000))

AAA(10)

Neyse asagidaki gibi yapilinca bu da cozuldu

def AAA(Data):
    import math
    print(math.trunc(Data*255/2000))
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 25 Nisan 2020, 15:25:12
Hocam, pycharm da proje açarken neredeki python u kullanıyorsunuz?
(Diğer konudaki bu arada 874945 konu içinde neredeyiz ben kaçırdım, env kullanmayın şimdilik dediğimi hatirliyorim)
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 15:56:48
Pycharm dedigimde hangisini aciyor bilmiyorum. Karsima gelen idenin kod yazim penceresine yaziyorum Shift F10 ile de calistiriyorum. Kim nerden calisiyor en ufak fikrim yok.

Bana Anaconda yukle demistin onu falan da yukledim. Bir ara spider diye bir sey de gordugumu hatirliyorum.

Makine curcuna oldu. Neyseki Pycharm ile kodlarimi yazip silip derleyebiliyorum.

env kullanma demissin ama env de ne ola ki? Kullaniyormuyum?

Kusura bakma hocam kor tuttugunu ...ermis. Ben de su anda pycharmi tuttum gidiyorum bir alamete.

Ama bir seyler cikiyor ortaya.
Başlık: Ynt: Aceminin python sorulari
Gönderen: devrecii - 25 Nisan 2020, 16:27:20
Alıntı yapılan: z - 25 Nisan 2020, 15:56:48Bana Anaconda yukle demistin onu falan da yukledim. Bir ara spider diye bir sey de gordugumu hatirliyorum.

Kusura bakma hocam kor tuttugunu ...ermis. Ben de su anda pycharmi tuttum gidiyorum bir alamete.

Ama bir seyler cikiyor ortaya.


Vay be C++ de bile kod yazmayı küçük gören asmci adam ne hallere düşmüş, ne oldu hocam hani sen mandaya kaymazdın  ;D  Java öldü mü?
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 16:49:01
lutfen ASM'ye ye saygi goster. Asm ya da ASM olarak yaz. (asm yazma)
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 25 Nisan 2020, 16:50:24
Alıntı yapılan: z - 25 Nisan 2020, 15:56:48Pycharm dedigimde hangisini aciyor bilmiyorum. Karsima gelen idenin kod yazim penceresine yaziyorum Shift F10 ile de calistiriyorum. Kim nerden calisiyor en ufak fikrim yok.

Bana Anaconda yukle demistin onu falan da yukledim. Bir ara spider diye bir sey de gordugumu hatirliyorum.

Makine curcuna oldu. Neyseki Pycharm ile kodlarimi yazip silip derleyebiliyorum.

env kullanma demissin ama env de ne ola ki? Kullaniyormuyum?

Kusura bakma hocam kor tuttugunu ...ermis. Ben de su anda pycharmi tuttum gidiyorum bir alamete.

Ama bir seyler cikiyor ortaya.

video cekeyim
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 17:19:19
Programin satir sayilari artmaya baslayinca programi iki parcaya bolup ayri py programi olarak devam edecegim.

Main.py icinde kullanacagim bazi fonksiyonlari fonk.py dosyasina yazacagim.

main.py icinde

from func import *

dersem global tanimi degiskenler sorun oluyor.

Main.py icindeki bir X global degiskeni fonk.py icinde gorulmuyor. Her defasinda da parametre gecirmek istemiyorum.

Bunun yolu nedir?



Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 25 Nisan 2020, 17:30:05
hocam soruyu pek anlamadm, bir öenek verebilirmisiniz?
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 25 Nisan 2020, 17:43:29
main.py
from mathIslemler import mathIslemlerClass
class main():
    def __init__(self):
        print("mainCalisti")

    def islemYap(self):
        mathIslemlerLocal=mathIslemlerClass()
        sonuc=mathIslemlerLocal.toplama(0,1)
        print(sonuc)

        alan=mathIslemlerLocal.daireninalani(r=150)
        print(alan)

if __name__ == '__main__':
    calisma=main()
    calisma.islemYap()

mathIslemler.py
class mathIslemlerClass():
    def __init__(self):
        print("MathIslemler Calisti")
        self.pi=3.14

    def toplama(self, s0, s1):
        return (s0 + s1)

    def daireninalani(self,r):
        return(self.pi*r*r)
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 17:46:22
from Motion import *

X=1
Artim=10

Send(X)
------------------------

Motion.py dosyasinda

def Send(Data):
    global X             # Bu X Ana programdaki globol X olarak algilanmiyor
    global Artim         # Bu Artim Ana programdaki globol Artim olarak algilanmiyor
    SendSPI(Data+Artim)
    X=Data+Artim         # Bu X Ana programdaki globol X olarak algilanmiyor


Sanki Motion.py icinde tanimlanmis global X, Artim gibi ele aliniyor.
Halbuki ben hem ana programdan hem de Motion.py programindan ayni X ve Artim degerlerine ulasmak istiyorum.

Ustelik X=Data+Artim islemine de kiziyor. Sanki string ile int topladigimi saniyor

TypeError: can only concatenate str (not "int") to str
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 18:15:28
def SetX(Burasi, Ilerleme, X_MotorundaBirTamTurKacMikrometre):        # Ilerleme Incremental Data
    if Ilerleme != 0:
      Clock=CalcClock(Ilerleme, X_MotorundaBirTamTurKacMikrometre)
      SendSPI(Clock & 0x0FFF)
      SendSPI(((Clock >> 12) & 0x0FFF) | 0x1000)
    return(Burasi+Ilerleme)
Program calisiyor Hata da vermiyor. Ne zaman SetX fonksiyonunu cagirirsam asagidaki hatayi aliyorum.

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Bulent\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/Bulent/Desktop/3DPrinter/MyPrinter.py", line 115, in XPButtonClick
    X=SetX(X, Artim, X_MotorundaBirTamTurKacMikrometre)
  File "C:\Users\Bulent\Desktop\3DPrinter\Motion.py", line 15, in SetX
    return(Burasi+Ilerleme)
TypeError: can only concatenate str (not "int") to str
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 25 Nisan 2020, 18:47:34
Burasi+ilerleme işleminde iki string istiyor.
Biri string diğeri int ise yapamaz.
Int int ise toplama yapar
Str str ise birleştirir
Sanirim string int var orada
 
Başlık: Ynt: Aceminin python sorulari
Gönderen: fide - 25 Nisan 2020, 18:56:58
Alıntı yapılan: z - 25 Nisan 2020, 18:15:28def SetX(Burasi, Ilerleme, X_MotorundaBirTamTurKacMikrometre):        # Ilerleme Incremental Data
    if Ilerleme != 0:
      Clock=CalcClock(Ilerleme, X_MotorundaBirTamTurKacMikrometre)
      SendSPI(Clock & 0x0FFF)
      SendSPI(((Clock >> 12) & 0x0FFF) | 0x1000)
    return(Burasi+Ilerleme)
Program calisiyor Hata da vermiyor. Ne zaman SetX fonksiyonunu cagirirsam asagidaki hatayi aliyorum.

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Bulent\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/Bulent/Desktop/3DPrinter/MyPrinter.py", line 115, in XPButtonClick
    X=SetX(X, Artim, X_MotorundaBirTamTurKacMikrometre)
  File "C:\Users\Bulent\Desktop\3DPrinter\Motion.py", line 15, in SetX
    return(Burasi+Ilerleme)
TypeError: can only concatenate str (not "int") to str

işlemi şu şekle çevirirseniz hata vermeyecektir.

return(int(Burasi)+int(Ilerleme))
yada ondalıklı değer varsa

return(float(Burasi)+float(Ilerleme))
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 25 Nisan 2020, 18:59:37
type(Degisken) diyerek değişkenin dataType ini görebilirsin hocam
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 25 Nisan 2020, 19:40:42
Iki programi birlestirip tek dosya haline getirince bahsettigim X=Data+Artim  sorunu bitti.
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 15:43:13
def OpenFile():
    root.filename = filedialog.askopenfilename(initialdir=".", title = "Select file", filetypes = (("gcode files","*.txt"), ("all files","*.*")))
    print(root.filename)
    with open(root.filename, newline='') as f:
        global SatirSayisi
        global reader
        SatirSayisi = 0
        reader = csv.reader(f)
        for line in reader:
            print(', '.join(line))
            SatirSayisi=SatirSayisi+1
        EkrandaGoster()

Yukaridaki fonksiyonla sectigim dosyayi okuyor ve dosyadaki satir sayisini ogreniyorum/sayiyorum

Asagidaki fonksiyonla da dosyanin ilk 6 satirini labellara yazoyorum. Ama ise yaramiyor. Hic bir sey yazmiyor.


def EkrandaGoster():

    i=1
    global reader
    for line in reader:
        if i==1:
           Satir1['text'] = line
        if i==2:
           Satir2['text'] = line
        if i==3:
           Satir3['text'] = line
        if i==4:
           Satir4['text'] = line
        if i==5:
           Satir5['text'] = line
        if i==6:
           Satir6['text'] = line
        i=i+1;

Bu kodlarda ne hatasi yapiyorum?
Guzel sekilde siz yazabilirmisiniz?

reader degiskenindeki herhangi bir satiri nokta atisi nasil okurum? Mesela Reader[5] 5. satiri oku gibi.
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 26 Nisan 2020, 15:56:12
Hocam Hızlı ama Kıra Döke Gidiyorsunuz, 
https://python-istihza.yazbel.com/temel_dosya_islemleri.html
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 16:08:10
Hocam bu dili ogenmeye zamanim yok, diger dillerdeki mantigi kullanarak alel acele isimi bitirip kurtulmak istiyorum.

global reader olarak tanimladigim reader icine reader = csv.reader(f) ile dosyayi attigima gore (atmiyor galiba, daha sonra satir satir okuyorum herhalde)

EkrandaGoster fonksiyonunda neden readerin ici bosaliyor anlamadim. Bosalmasi diye global tabimlamistim halbuki.

Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 16:29:29
Sorunu anladim ama cozumunu bilmiyorum.

Dosyayi satir satir okuyup bu satirlari array icine atayim.

Atayim ama bu sekilde dosyadan okunan her bir satir arrayin bir elemani olacak sekilde global bir array nasil tanimlanir?
Dosyam olsun olsun 10 bin satir olsun.

 
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 16:39:42
Dosyamiz= [[] for _ in range(10000)]

"""
  Okunan Dosyayi ekranda gosterelim
"""
def EkrandaGoster():
    global Dosyamiz
    Satir1['text']=Dosyamiz[0]
    Satir2['text']=Dosyamiz[1]
    Satir3['text']=Dosyamiz[2]
    Satir4['text']=Dosyamiz[3]
    ....
    ....

def OpenFile():
    root.filename = filedialog.askopenfilename(initialdir=".", title = "Select file", filetypes = (("gcode files","*.txt"), ("all files","*.*")))
    print(root.filename)
    with open(root.filename, newline='') as f:
        global SatirSayisi
        global Dosyamiz
        SatirSayisi = 0
        reader = csv.reader(f)
        for line in reader:
            print(', '.join(line))
            Dosyamiz[SatirSayisi]=line;
            SatirSayisi=SatirSayisi+1
        EkrandaGoster()

Boyle oldu.
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 26 Nisan 2020, 16:43:58
satır satır okumak için readline var.

dizi (array) oluşturmak için
dizi=[]

diziye eleman eklemek için
dizi. append("test")

ikiboyutluDizi=[[]]

ikiboyutluDizi[ 0]. append("test0")
ikiboyutluDizi[ 0].append("test0")

ikiboyutluDizi[ 1].append("test1")
ikiboyutluDizi[ 1].append("test1")

test0  test0
test1  test1
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 16:57:30
Soru 1

tkinter ile label kullaniminda bir sorun yasiyorum.

Satir1 = Label(root, text="", width=56, fg="black", font=("Helvetica", 20, 'bold'), justify=LEFT, relief=FLAT)
Satir2 = Label(root, text="", width=56, fg="gray", font=("Helvetica", 20, 'bold'), justify=LEFT, relief=FLAT)

Satir1.place(x=12, y=12)
Satir2.place(x=12, y=42)

Satir1['text'] = "11111111111111111111111111111111111111111111111111111"
Satir2['text'] = "21111111111111111111111111111111                              "

justify=LEFT tanimladigim halde labellara yerlestirdigim textler labelda sola dayali degil tam ortada gorunuyor.

Nerde hata yapiyorum?

Cevap 1

Istedigim anchor parametresi ile yapiliyormus.

Satir1 = Label(root, text="", width=56, fg="black", font=("Helvetica", 20, 'bold'), justify=LEFT, anchor=W, relief=FLAT)
Satir2 = Label(root, text="", width=56, fg="gray", font=("Helvetica", 20, 'bold'), justify=LEFT, anchor=W, relief=FLAT)

sorunu cozdu.
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 17:46:18
Soru 2

Bir fonksiyonuma girilince fonksiyonun isleri tamamlamasi bazen 10 saati bulacak.

Delphi de bu tur durumlarda makine diger tasklarla ugrasabilsin not responding mesaji vermesin diye
fonksiyon icindeki ana dongu icinde application.processmessages diye bir komut isletiyordum.

Simdi pythonda da ayni seye ihtiyacim olacak gibi gorunuyor ama emin degilim cunku Linuxda isler nasil yuruyor hic fikrim yok.

Diyelim ki bir fonksiyon yazdiniz. Fonksiyon bir counteri 1 1 artirarak hedef degere ancak 1 saat sonra erisecek olsun. Bu sayim esnasinda fonksiyondan hic cikmasin dongude kalsin. Bu sayim islemi esnasinda ekrandaki butonlara falan da tiklayabileyim, ekrani minimize maximize edebileyim.

Bu esnada linux diger isleri ile de ilgilenebilsin.

Bu is python da nasil yapilir?

Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 17:50:35
Soru 3

Yazdigim program uzadikca uzadi artik programi parcalara bolmenin vakti geldi.

Upuzun bir programi uygun bir yerinden  bolup iki parcaya ayirmak istiyorum.

1. program 2.programi include edecek.

Python da bu islem nasil yapilir?


Başlık: Ynt: Aceminin python sorulari
Gönderen: mehmet - 26 Nisan 2020, 18:00:23
Hocam öncelikle @muhittin_kaplan 'ın tavsiye
ettiği gibi tkinter 'i yol başında terk edin.
PySide2, PySimpleGUI, vb. modüllerle devam
etmek daha uygun olacak.

Bir de class yapısına bakarsanız sorun
hallolacak. Kendinize metodlar oluşturup
başka metodlar içine alıp fonksiyonlarını
kullanabilirsiniz.
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 18:14:07
Pythonla ilelebet ugrasmayacagim.

Derdimi anlatayim.

Gelistirmekte oldugum bir cihazin/kartin  ornek kullanimi icin Raspberry pi zeroyu sectim.
SBC ile calismak isteyenler icin ornek bir proje budur bakin hosunuza giderse cihazimi alir ve kendi projelerinizde basitce kullanabilirsiniz tarzinda bir sey yapiyorum.

Calisan duzenekte bir iki video cekip ornek kodu da yayinlamam ardindan belki bir daha elimi pythona hic surmeyecegim.

Durum boyle olunca GUIlerle falan ugrasmak istemiyorum. tkinter simdilik isimi gordu.
Keske elemanlarim olaydi da alin sunu yazin 3 gun sonrasina istiyorum diyebilseydim.

Başlık: Ynt: Aceminin python sorulari
Gönderen: mufitsozen - 26 Nisan 2020, 18:23:56
Alıntı yapılan: z - 26 Nisan 2020, 17:46:18Bu is python da nasil yapilir?



Multithreaded programming in Python
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 26 Nisan 2020, 18:56:14
Thread isine girmeden basit bir yol yokmu?

Diylimki bir fonksiyona girdik mi 1 trilyona kadar bir bir sayacagiz ve 1 trilyona ulastigimizda fonksiyonan cikacagiz.

Fonksiyonu cagirdigimda sayma devam ederken cikis tusuna bastigimda programi nasil kapatabilirim?
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 27 Nisan 2020, 18:31:24
Python da threading nasıl yapilir?(kolay yöntemi pyqt yada pyside2 dir)
Tkinter olunca işler sarpa sarıyor.
ThreadSafe değil cunki.
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 27 Nisan 2020, 18:35:45
http://muhittinkaplan.com/blog/2017/09/09/python-serial-pyqt5-and-stm32f4/
Şurada pc seriport stm32 python pyqt çalışması var hocam.
Seri port thread ile dinleniyor.
Başlık: Ynt: Aceminin python sorulari
Gönderen: Yuunus - 27 Nisan 2020, 22:26:08
@z eger linux uzerinde calisacak programlar gelistirmek icin phyton ile ugrasiyorsan asina oldugun delphi nin lazarus adinda linux ustunde calisan bir kardesi var, hemen hersey delphi ile ayni, birde delphi zaten linux icin binary file uretiyor diye hatirliyorum, phyton basliginda benimkide yapilacak is degilya neyse kusura bakmayin :( .
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 02 Mayıs 2020, 10:57:32
Diger dillerle ilgili cabalarim sonucsuz kalinca dondum dolastim pythona geri dondum.

QtDesigner ile grafik tasarimimi yaptiktan sonra sagolsun iskelet kod yapisini olusturan Muhittin Kaplan hocamin sayesinde kodlamaya devam edebiliyorum.

Simdiki sorunum;

Ekranda 20 satirini gosterebilen textEdit icine 21 satir attigimda haliyle 21. satir gorunmeyecek.

Fakat istedigimde 21. satiri ekranda gorunebilen bolgeye tasimak icin ne yapmam lazim?
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 03 Mayıs 2020, 13:19:03
PyQt5 TextEdit icine metin atiyorum.

1. satirda metnin ilk satiri gorunuyor.

Satirlari yukari kaydirip, ekranin 1. satirinda metnin 2.satirini nasil gosteririm?

Bir diger sorum da TextEdit icindeki bazi satirlari farkli renklendirmek istiyorum. bunu nasil yaparim?
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 03 Mayıs 2020, 20:12:16
o iş için doğru eleman o değil abi.
listwidget ile yapılabilir.
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 04 Mayıs 2020, 14:38:36
Thread ile basim dertte.

Zaten python gibi threadler hakkinda da bilgim yok.

Sorunumu tarif edeyim.

Ana program Threade X gibi bir parametre yollayacak ve start edecek.

Thread devreye girince

  for n in range(0, x):
      print(n)

satirlarini isletip ana programa bitti diye bir sinyal gonderecek.

Ana program threadden gelen sinyali aldiginda farkli bir x parametresi ile tekrar threade gorev verecek.

Bunu nasil yapacagim?
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 04 Mayıs 2020, 15:10:16
self.mythread=tempThread.myThread(param=x)
self.mythread.signal.connect(self.threadDegeriniAl)
self.mythread.start()

Bu sekilde kullanmamin bir sakincasi var mi?


Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 04 Mayıs 2020, 22:13:55
İlk Soruna cevap vereyim Hocam, benim uyguladığım yöntem şu şekilde.
Thread ile main ararında bir signal slot bağlantısı yapıyorum. Thread işi bitirdiğinde (işin bittiğini bilmem lazım tabi)thread içinden bir signal emit ile "bitti" diyorum.
Main tekrar start ediyor(yada işe göre başlatıyorum). ama thread yapısı gereği start (yani thread içindeki run metodu) parametre alamıyor. onun için her seferinde thread class ı yeniden oluşturuyorum.
bir örnek yapayım
Başlık: Ynt: Aceminin python sorulari
Gönderen: sessiz_roman - 04 Mayıs 2020, 22:17:13
bilgisayarda çalıştırdığımız python ile arduino veya arm boardları nasıl haberleştireceğiz. bununla ilgili bir rehber var mı acaba.
çok teşekkürler.
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 04 Mayıs 2020, 22:47:01
MAIN.PY
import sys
from PyQt5 import QtWidgets,QtGui
from PyQt5.QtWidgets import QAction,QMessageBox,QFileDialog
from PyQt5.QtCore import pyqtSlot
from untitled import Ui_Dialog  # importing our generated file
import myThreadClassFile

class mywindow(QtWidgets.QDialog):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.threadBaslat)
        self.param=1

    def threadBaslat(self):
        self.thread=myThreadClassFile.MyThreadClass(parametre=self.param)
        self.thread.threadBittiSignal.connect(self.threadBittiMainFunction)
        self.thread.start()
        self.param=self.param+1

    @pyqtSlot(bool)
    def threadBittiMainFunction(self,bittiSinyal):
        self.ui.listWidget.addItem("Thread Bitti = "+str(bittiSinyal))


app = QtWidgets.QApplication([])
application = mywindow()
application.show()
sys.exit(app.exec())

UNTITLED.PY arayüz.
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.listWidget = QtWidgets.QListWidget(Dialog)
        self.listWidget.setGeometry(QtCore.QRect(10, 10, 381, 192))
        self.listWidget.setObjectName("listWidget")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(229, 210, 161, 23))
        self.pushButton.setObjectName("pushButton")

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "Thread Start"))


MYTHREADCLASSFILE.PY
#!/usr/bin/python3

from PyQt5.QtCore import QThread, pyqtSignal
import time
from datetime import datetime

class MyThreadClass(QThread):
    threadBittiSignal = pyqtSignal(bool)

    def __init__(self,parametre):
        QThread.__init__(self)
        print("thread sınıfı oluşturuldu")

        self.localParametre=parametre
    # run method gets called when we start the thread
    def run(self):
        if (self.localParametre==1):
            for i in range (5):
                print("Yuzkez parametre=1")
                time.sleep(1)
            self.threadBittiSignal.emit(True)
        elif(self.localParametre==2):
            for i in range (5):
                print("Yuzkez parametre=2")
                time.sleep(1)
            self.threadBittiSignal.emit(True)
        else:
            for i in range (5):
                print("Yuzkez parametre=None")
                time.sleep(1)
            self.threadBittiSignal.emit(True)
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 04 Mayıs 2020, 22:48:32
Alıntı yapılan: startirrek704250 - 04 Mayıs 2020, 22:17:13bilgisayarda çalıştırdığımız python ile arduino veya arm boardları nasıl haberleştireceğiz. bununla ilgili bir rehber var mı acaba.
çok teşekkürler.
PC de hangi protu kullanmak istiyorsunuz, USB SERİ PARALEL ona göre python kütüphanesi mevcut. İsterseniz yeni bir konu açınız.
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 05 Mayıs 2020, 09:33:25
İşimi gördü teşekkürler.

Saçma gelecek içimde şöyle bir korku var.

Threadi oluşturup çalıştırıyoruz. Ardından yeniden oluşturuyoruz ve çalıştırıyoruz.

Bir önce oluşturduğumuz threadi öldürmek gibi bir işlem yokmu? Yani hafızada bu işlemler birikim yapmaz mı?

Çünkü binlerce kez thread oluşturup çalıştıracağım.
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 05 Mayıs 2020, 18:49:29
Hocam Emin değilim (Araştırıyorum) ama garbage collection işi halleder sanırım. (Kullanılmayan nesnelerin hafızadan atılmasını sağlayan bir sistem gibi düşünebilirsiniz)
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 05 Mayıs 2020, 19:06:02
hocam thread sınıfındaki aşağıdaki satırları
    def __init__(self,parametre):
        QThread.__init__(self):

aşağıdaki satırlar ile (parent e dikkat)
def __init__(self,parent,parametre):
QThread.__init__(self,parent)

ve

main class daki aşağıdaki satırı
self.thread=myThreadClassFile.MyThreadClass(parametre=self.param)
aşağıdaki satırla değiştiriniz.
self.thread=myThreadClassFile.MyThreadClass(self,parametre=self.param)
thread ı oluşturuken ebeveyn olarak birşey vermemişiz. vermek doğru kullanımdır.
main Class ı ebeveyn olarak thread a parametre geçiyoruz. Self her sınıfta o sınıfı temsil eder (c# this gibi,vb de Me gibi)
Başlık: Ynt: Aceminin python sorulari
Gönderen: mufitsozen - 05 Mayıs 2020, 19:22:06
Alıntı yapılan: muhittin_kaplan - 05 Mayıs 2020, 18:49:29Hocam Emin değilim (Araştırıyorum) ama garbage collection işi halleder sanırım. (Kullanılmayan nesnelerin hafızadan atılmasını sağlayan bir sistem gibi düşünebilirsiniz)


Normal olarak bir thread yarattiginizda onunla haberlesmek icin birde Queue tanimlarsiniz ve bir parametre olarak verirsiniz.

Bundan sonra o threadle haberlesmek isteyen herkes bu queue'yu kullanir. Thread icinde ise bu queudan komutlari alip isleyen bolum 'bitir' komutunu alinca thread'i sonlandirilir.

(pythonda hersey global oldugu icin ve butun threadler ayni global'leri paylasirlar ve bazi tecrubesiz programcilar haberlesme icin boyle bir yontemi secebilirler ama bu dogru bir haberlesme sekli degildir, kullanimda cok problemlere yol acar.)
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 05 Mayıs 2020, 21:33:39
@mufitsozen Hocam, Thread ı bitince tekrar , bitince tekrar parametreli çağıracak. QThread çalıştırma anında parametre geçemiyoruz. ilk yaptığımda sınıfın constructor una parametre geçtim. Burada her çalıştırmada Thread ı yeniden oluşturmak gerekiyor dogal olarak.Bu bir sorun olabilir. onun yerine bir fonksiyon oluşturup parametreyi oraya geçeceğim.
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 05 Mayıs 2020, 21:45:37
import sys
from PyQt5 import QtWidgets,QtGui
from PyQt5.QtWidgets import QAction,QMessageBox,QFileDialog
from PyQt5.QtCore import pyqtSlot
from untitled import Ui_Dialog  # importing our generated file
import myThreadClassFile

class mywindow(QtWidgets.QDialog):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.threadBaslat)
        self.param=1

        self.thread=myThreadClassFile.MyThreadClass(self)
        self.thread.getValuFromMain(self.param)
        self.thread.threadBittiSignal.connect(self.threadBittiMainFunction)

    def threadBaslat(self):
        if (self.thread.isRunning()==False):
            self.thread.getValuFromMain(self.param)
            self.thread.start()
            self.param = self.param + 1


    @pyqtSlot(bool)
    def threadBittiMainFunction(self,bittiSinyal):
        self.ui.listWidget.addItem("Thread Bitti = "+str(bittiSinyal))


app = QtWidgets.QApplication([])
application = mywindow()
application.show()
sys.exit(app.exec())
------------------------------------------------------------------------------------------------

#!/usr/bin/python3

from PyQt5.QtCore import QThread, pyqtSignal
import time
from datetime import datetime

class MyThreadClass(QThread):
    threadBittiSignal = pyqtSignal(bool)

    def __init__(self,parent):

        QThread.__init__(self,parent)
        print("thread sınıfı oluşturuldu")

    # run method gets called when we start the thread
    def getValuFromMain(self,parameterFromMain):
        self.localParametre=parameterFromMain

    def run(self):
        if (self.localParametre==1):
            for i in range (1000):
                print("Yuzkez parametre=1")
                time.sleep(0.01)
            self.threadBittiSignal.emit(True)
        elif(self.localParametre==2):
            for i in range (1000):
                print("Yuzkez parametre=2")
                time.sleep(0.01)
            self.threadBittiSignal.emit(True)
        else:
            for i in range (1000):
                print("Yuzkez parametre=None")
                time.sleep(0.01)
            self.threadBittiSignal.emit(True)

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

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.listWidget = QtWidgets.QListWidget(Dialog)
        self.listWidget.setGeometry(QtCore.QRect(10, 10, 381, 192))
        self.listWidget.setObjectName("listWidget")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(229, 210, 161, 23))
        self.pushButton.setObjectName("pushButton")

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "Thread Start"))

Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 05 Mayıs 2020, 21:46:27
@mufitsozen Hocam QQUE varmış QT de ama PyQT de bir örneğine denk gelmedim.
Başlık: Ynt: Aceminin python sorulari
Gönderen: mufitsozen - 05 Mayıs 2020, 22:07:57
Alıntı yapılan: muhittin_kaplan - 05 Mayıs 2020, 21:46:27@mufitsozen Hocam QQUE varmış QT de ama PyQT de bir örneğine denk gelmedim.

Python standard lib'de var.

Python Essential Reference
Fourth Edition
Copyright © 2009 by Pearson Education, Inc.


from queue import Queue

Programming with Threads
Although it is possible to write very traditional multithreaded programs in Python using
various combinations of locks and synchronization primitives, there is one style of pro-
gramming that is recommended over all others—and that's to try and organize multi-
threaded programs as a collection of independent tasks that communicate through
message queues.This is described in the next section (the queue module) along with
an example.
queue , Queue
The queue module (named Queue in Python 2) implements various multiproducer,
multiconsumer queues that can be used to safely exchange information between multi-
ple threads of execution.
The queue module defines three different queue classes:
Queue([ maxsize ])
Creates a FIFO (first-in first-out) queue. maxsize is the maximum number of items
that can be placed in the queue. If maxsize omitted or 0, the queue size is infinite.
LifoQueue([ maxsize ])
Creates a LIFO (last-in, first-out) queue (also known as a stack.
..........
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 06 Mayıs 2020, 02:09:45
Alıntı yapılan: mufitsozen - 05 Mayıs 2020, 19:22:06(pythonda hersey global oldugu icin ve butun threadler ayni global'leri paylasirlar ve bazi tecrubesiz programcilar haberlesme icin boyle bir yontemi secebilirler ama bu dogru bir haberlesme sekli degildir, kullanimda cok problemlere yol acar.)

Mesela nasıl problemler olur?
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 06 Mayıs 2020, 02:19:40
Ama bir de şöyle durum var;

Mevcut yapı benim işime geldi. Thread oluşturulurken parametre geliyor ardından thread çalıştırılıyor.

Yeni bir görev geleceği zaman parametresi geliyor ve yeni den thread çalıştırılıyor.

Şimdi ana program ile thread arasında bir veri yolu oluştulunca thread veri geldimi diye polling mi yapacak?

Ana program tarafında sorun yok ama thread bu şekilde görev geldimi geldimi diye döngüye girerecekse işlemciyi yormayacak mı?
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 06 Mayıs 2020, 03:07:39
son attığım örnekte sadece 1tek thread oluşturuyorsun hocam. Dolayısıyla MEM de sadece tek threadın oluşuyor.
diğerinde her seferinde başka thread oluşturuyor. MEM de çok fazla thread bekleyebilir. garbage collector aha bu çöp atayım şunu diyene kadar.
Ben olsam son attığım örneği kullanırdım.
QUE @mufitsozen hocanın söylediği gibi Core Python da mevcut ama ben PyQT nin nesneleri ile corePython nesnelerini kullanmak istemiyorum.
Başlık: Ynt: Aceminin python sorulari
Gönderen: bocek - 06 Mayıs 2020, 10:02:25
@z hocam projenizde işinize yarar mı bilmiyorum ama python'da telegram modülü de var. Telegram üzerinden takip ve/veya kumanda edebiliyorsunuz programınızı. Madem Python'a bulaştınız bilginiz olsun diye söylüyorum.
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 06 Mayıs 2020, 14:26:47
Telegramla hiç ilgilenmedim ama program istendiği gibi çalıştıktan sonra internet üzerinden de kumanda edilebilsin ya da en azından ekran görüntüsüne internet üzerinden ulaşılabilsin isterim.

Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 07 Mayıs 2020, 03:13:53
Raspi icin python ile gelistirilen uygulama kolayca android telefonlarda da calistirilabilir mi?
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 07 Mayıs 2020, 03:30:39
Python ile yazilan kodlarin uzerinde kosturuldugu isletim sistemini nasil ogrenirim?

Ogrenebilirsem isletim sistemine gore asagidaki gibi farkli seyler yapmak istiyorum.

    if OpSys=='windows': 
        ....
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 07 Mayıs 2020, 03:38:34
windowsda PyCharm ile calisirken GPIO, SPI gibi donanimlarla ilgili kutuphanelerden fonksiyon cagirmaya kalkarsam hata aliyorum.

Eger isletim sistemi windows ise GPIO gibi donanimlara ait kutuphanelerden import islemlerini yapma dedirtmem lazim.

Gene ayni sekilde eger isletim sistemi windows ise GPIO fonksiyonlarini kullandigim satirlari dikkate alma diyebilmem lazim.

Boylece python kodlarimi windowsda calistirirsam hic hata almadan demo modundasiniz uyarisi verip GPIO vs satirlarini isletmeyecegim.

Ama bu is nasil yapilir bilmiyorum.
Başlık: Ynt: Aceminin python sorulari
Gönderen: fide - 07 Mayıs 2020, 04:21:41
Alıntı yapılan: z - 07 Mayıs 2020, 03:30:39Python ile yazilan kodlarin uzerinde kosturuldugu isletim sistemini nasil ogrenirim?

Ogrenebilirsem isletim sistemine gore asagidaki gibi farkli seyler yapmak istiyorum.

    if OpSys=='windows': 
        ....

os isimli bir library var.
Import os
Print (os. Name) ile ulaşılabiliyor.
Kaynak: https://www.google.com/amp/s/www.geeksforgeeks.org/os-module-python-examples/amp/ (https://www.google.com/amp/s/www.geeksforgeeks.org/os-module-python-examples/amp/)
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 07 Mayıs 2020, 04:41:02
sagolasin. os.name isimi gordu.

Diger sorunum icin ne diyorsun?

Os tipine gore kutuphaneleri ilk basta include edip etmeme olayini nasil yaparim?
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 08 Mayıs 2020, 00:38:34
doğrudan if ile.
if falanaca os ise
import falancaModul
Başlık: Ynt: Aceminin python sorulari
Gönderen: muhittin_kaplan - 08 Mayıs 2020, 00:45:17
https://stackoverflow.com/questions/3496592/conditional-import-of-modules-in-python
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 15 Mayıs 2020, 19:23:31
my_string = b'xxx' ifadesindeki b harfi, xxx stringinin 0..255 arasi verilerden olusmasini sagliyormus.

Pythondan C ye yolladigim stringi b parametresi ile yollamazsam program duzgun calismiyor.

fopen ardindan her bir satiri line degiskenin icine okuyorum.

line degiskeni icindeki stringi my_string = b'The string' gibi nasil sartlandiririm?
Başlık: Ynt: Aceminin python sorulari
Gönderen: fide - 15 Mayıs 2020, 21:01:25
Text=serial.read(serial.in_waiting)
Text.encode('utf-8')

Gönderirken de
Serial.write(text.decode('utf-8'))


My_string.decode('utf-8')
My_string.encode('utf-8')

https://www.google.com/amp/s/www.geeksforgeeks.org/python-strings-decode-method/amp/ (https://www.google.com/amp/s/www.geeksforgeeks.org/python-strings-decode-method/amp/)
Başlık: Ynt: Aceminin python sorulari
Gönderen: z - 16 Mayıs 2020, 06:00:01
Tesekkurler istedigim oldu.

Python' satirlari arasindan dll icindeki C fonksiyonunu cagirirken fonksiyonun string tipi parametresini asagidaki gibi yolluyoruz.

line degiskenim python'da stringimi tutuyor olsun.

send adindaki C fonksiyonuma bu line stringini yollamak icin send(line degil) 

send(line.encode('utf-8')) seklinde kullanmamiz gerekiyor.

C fonskiyonumuzun prototipi mesela asagidaki gibi

int send(char *)