Python Python "QObject::startTimer: Timers cannot be started from another thread" Hatası

OmerF_B

Hectopat
Katılım
24 Mart 2019
Mesajlar
24
Daha fazla  
Cinsiyet
Erkek
Merhabalar. Python ile Google E-Tablolar'da oluşturulmuş bir tabloya kullanıcıdan alınan verileri aktaran bir program yazdım. Yazdığım programı, setup dosyasına çevirip evimdeki bilgisayarıma (win10) kurduğumda sorunsuz kullanabiliyorum fakat iş yerindeki başka bir bilgisayara (win10) kurmaya çalıştığımda başlıktaki hatayı alıyorum. Yazdığım programın içeriğinde timer bulunmuyor. Bir for döngüsü içerisinde sürekli bir TextLabel eş zamanlı şekilde güncelleniyor.

Yazdığım programda E-Tablolar'a işlenen veriler, eş zamanlı şekilde ekrana yazdırılıyor. Dolayısıyla bir TextLabel slotu sürekli güncelleniyor. Threading modülüyle TextLabel'ı sürekli güncellemeye çalıştığımda başlıktaki hatayı alıyorum fakat TextLabel'ı hiçbir şekilde güncellemediği başka bir senaryoda herhangi bir hata almıyorum.

İkinci paragrafta belirttiğim sorunları sadece iş yerindeki bilgisayara kurmaya çalıştığımda yaşıyorum. Ne evimdeki bilgisayarda ne de programı geliştirdiğim dizüstü bilgisayarımda herhangi bir sorunla karşılaşıyorum. Hatalı kısım eş zamanlı şekilde TextLabel'ı güncellemekse neden kendi bilgisayarlarımda bu sorunu yaşamıyorum? Bu yüzden, sorunun kodlarda değil; iş yerindeki bilgisayarda olduğunu düşünüyorum. Çünkü dediğim gibi: aynı program, iki bilgisayarımda da sorunsuz çalışıyor.

Detaylıca anlatmaya çalıştım. Dolayısıyla biraz karışık bir açıklama oldu, farkındayım. Yardımcı olabilirseniz çok sevinirim, iyi forumlar.
 
Qt gui döngüsüne başka bir thread üzerinden müdahale edersen bu race condition gibi olaylara sebep olur ve program çöker. Thread için QT'nin kendi thread library'ini kullanmak daha uygun olur. Hatırladığım kadarıyla gui ile etkileşimde QT thread'ın kendi otomatik senkronizasyonu vardı, bunun dışında senkron çağrılar için qt'nin özel bir çağrı fonksiyonu olması gerek onu da araştırabilirsin.
 
Söylediklerini dikkate alacağım, teşekkür ederim. Bir gelişme olduğunda tekrar bilgilendireceğim fakat anlamadığım bir nokta var: Bu sorunla neden sadece şirket bilgisayarında karşılaşıyorum?
 
Bu hata, PyQt veya PySide gibi Python ile GUI uygulamaları geliştirmek için kullanılan kütüphanelerde karşılaşılan bir durumu ifade eder. Bu hata genellikle PyQt veya PySide'da çoklu iş parçacığı (thread) kullanırken, ana thread dışından bir zamanlayıcının başlatılması durumunda meydana gelir.

"QObject::startTimer: Timers cannot be started from another thread" hatası, PyQt veya PySide'da bir zamanlayıcının başka bir iş parçacığından (thread) başlatılmaya çalışıldığını belirtir. PyQt ve PySide gibi GUI kütüphaneleri, grafiksel bileşenlerin ana iş parçacığı (genellikle ana thread) üzerinde çalışmasını gerektirir ve bu nedenle zamanlayıcılar da genellikle bu ana iş parçacığından başlatılmalıdır.

Eğer bu hatayı alıyorsanız, aşağıdaki adımları gözden geçirebilirsiniz:

  1. Zamanlayıcıyı Ana İş Parçacığından Başlatın: Zamanlayıcıyı ana iş parçacığından (genellikle ana thread) başlatmaya dikkat edin. PyQt veya PySide'da, grafiksel bileşenlerle etkileşimde bulunurken genellikle ana iş parçacığı kullanılmalıdır.
  2. Qt Timer Kullanımına Dikkat Edin: PyQt veya PySide'da QTimer sınıfını kullanarak zamanlayıcılar oluştururken, zamanlayıcıyı doğrudan bir iş parçacığından başlatmaya çalışmaktan kaçının. Eğer farklı iş parçacıklarında zamanlayıcı kullanmanız gerekiyorsa, bu işlemi düzgün bir senkronizasyon mekanizması kullanarak yapmalısınız.
  3. QThread Kullanımını İnceleyin: PyQt ve PySide'da çoklu iş parçacığı kullanımı gerektiren durumlar için QThread sınıfını kullanabilirsiniz. Ancak, QThread kullanırken dikkatli olmanız ve iş parçacıkları arasındaki iletişimi doğru bir şekilde sağlamanız önemlidir.
Eğer kodunuzu paylaşabilirseniz, özel bir duruma yönelik daha fazla yardımcı olabilirim. Ayrıca, hangi senaryoda bu hatayı aldığınızı veya hangi kod parçacıklarının bu hatayı tetiklediğini daha ayrıntılı olarak açıklarsanız, daha spesifik bir çözüm sunabilirim.
 

Yeni konular

Geri
Yukarı