Aceminin python sorulari

Başlatan z, 25 Nisan 2020, 11:30:48

z

#15
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
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

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
 

fide

Alıntı yapılan: 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

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

return(int(Burasi)+int(Ilerleme))

yada ondalıklı değer varsa

return(float(Burasi)+float(Ilerleme))
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

muhittin_kaplan

type(Degisken) diyerek değişkenin dataType ini görebilirsin hocam

z

Iki programi birlestirip tek dosya haline getirince bahsettigim X=Data+Artim  sorunu bitti.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan


z

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

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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

 
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#25
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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

#26
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

z

#27
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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#28
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?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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?


Bana e^st de diyebilirsiniz.   www.cncdesigner.com