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?
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.
Bu kez de hata mesaji: NameError: name 'trunc' is not defined
import satirini etkisiz hale getirirsem de ayni hatayi veriyor.
#from math import trunc
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.
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.
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)
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))
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)
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.
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ü?
lutfen ASM'ye ye saygi goster. Asm ya da ASM olarak yaz. (asm yazma)
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
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?
hocam soruyu pek anlamadm, bir öenek verebilirmisiniz?
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)
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
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
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
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))
type(Degisken) diyerek değişkenin dataType ini görebilirsin hocam
Iki programi birlestirip tek dosya haline getirince bahsettigim X=Data+Artim sorunu bitti.
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.
Hocam Hızlı ama Kıra Döke Gidiyorsunuz,
https://python-istihza.yazbel.com/temel_dosya_islemleri.html
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.
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.
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.
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
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.
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?
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?
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.
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.
Alıntı yapılan: z - 26 Nisan 2020, 17:46:18Bu is python da nasil yapilir?
Multithreaded programming in Python
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?
Python da threading nasıl yapilir?(kolay yöntemi pyqt yada pyside2 dir)
Tkinter olunca işler sarpa sarıyor.
ThreadSafe değil cunki.
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.
@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 :( .
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?
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?
o iş için doğru eleman o değil abi.
listwidget ile yapılabilir.
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?
self.mythread=tempThread.myThread(param=x)
self.mythread.signal.connect(self.threadDegeriniAl)
self.mythread.start()
Bu sekilde kullanmamin bir sakincasi var mi?
İ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
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.
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)
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.
İş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.
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)
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)
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.)
@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.
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"))
@mufitsozen Hocam QQUE varmış QT de ama PyQT de bir örneğine denk gelmedim.
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.
..........
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?
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ı?
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.
@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.
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.
Raspi icin python ile gelistirilen uygulama kolayca android telefonlarda da calistirilabilir mi?
Python ile yazilan kodlarin uzerinde kosturuldugu isletim sistemini nasil ogrenirim?
Ogrenebilirsem isletim sistemine gore asagidaki gibi farkli seyler yapmak istiyorum.
if OpSys=='windows':
....
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.
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/)
sagolasin. os.name isimi gordu.
Diger sorunum icin ne diyorsun?
Os tipine gore kutuphaneleri ilk basta include edip etmeme olayini nasil yaparim?
doğrudan if ile.
if falanaca os ise
import falancaModul
https://stackoverflow.com/questions/3496592/conditional-import-of-modules-in-python
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?
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/)
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 *)