folder Tahribat.com Forumları
linefolder Python
linefolder [Yardım] Wxpython GUI



[Yardım] Wxpython GUI

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    beyler nerde yanlış yapıyorum bir bakar mısınız?

    windows'ta çalışıyor takır takır: http://inciswf.com/twktmoxt.swf 

    ubuntu'da (python 2.7.3 + wxPython kurulu): tıkladığımda 1 yazıyor ve donuyor GUI

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo
    # -*- coding: utf-8 -*- 
    
    import threading
    import wx
    import time
    
    class MyFrame1 ( wx.Frame ):
    	
    	def __init__( self, parent ):
    		self.p_stop = 0
    		self.p_checked = 0
    		wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
    		
    		self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
    		
    		bSizer3 = wx.BoxSizer( wx.VERTICAL )
    		
    		self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"Yazilar", wx.DefaultPosition, wx.DefaultSize, 0 )
    		self.m_staticText1.Wrap( -1 )
    		bSizer3.Add( self.m_staticText1, 0, wx.ALL, 5 )
    		
    		self.m_button1 = wx.Button( self, wx.ID_ANY, u"Tikla", wx.DefaultPosition, wx.DefaultSize, 0 )
    		bSizer3.Add( self.m_button1, 0, wx.ALL, 5 )
    		
    		self.SetSizer( bSizer3 )
    		self.Layout()
    		self.m_statusBar1 = self.CreateStatusBar( 1, wx.ST_SIZEGRIP, wx.ID_ANY )
    		
    		self.Centre( wx.BOTH )
    		
    		self.m_button1.Bind( wx.EVT_BUTTON, self.button1_tikla )
    	
    	def __del__( self ):
    		pass
    
    	def button1_tikla( self, event ):
    		try:
    			self.p
    		except:
    			self.p = threading.Thread(target=self.th1)
    			self.p_stop = 0
    			self.p_checked = 0
    			self.p.start()
    		else:
    			print u"Thread zaten çalışıyor"
    	def th1(self):
    			try:
    				for x in range(1,100000):
    					if self.p_stop == 1:
    						self.p_checked = 1
    						break
    					self.m_staticText1.Label = str(x)
    					time.sleep(0.01)
    				self.p_checked = 1
    			except:
    				print u"Thread çalıştırma hatası"
    			else:
    				print u"sorun yok"
    
    app = wx.App(False)
    frame = MyFrame1(None)
    frame.Show(True)
    app.MainLoop()
    
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    up

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    up

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Easx
    Easx's avatar
    Kayıt Tarihi: 23/Ocak/2010
    Erkek

    hocam bu konuda bilgim olsa ilk paylaşmak isteyeceğim insan sensin ama yok malesef şimdilik.

    En azından uplayalım bilen çıkar elbet.


    www.kriptopedi.com
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nick6
    0x656e
    0x656e's avatar
    Kayıt Tarihi: 19/Mayıs/2012
    Homo

    uplıyım kanka :)

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    python dan anlamam hocam ama hatayı deneme yanılma yöntemi ile bulabilirsin.

    anladığım kadarıyla for a kadar geliyor. for un içindeki kodları commente al. sonra x değerini console/output/trace artık ne varsa oraya yazdır. bak bakalım for döngüsü sıkıntısız çalışıyor mu?

    eğer problem var ise for un değerini değiştir sayıyı küçültüp dene, olmadı for u kaldır ve kodunu öyle yaz.. o da olmadı üst taraftaki kodlara bak.

    eğer for sorunsuz çalıştıysa for un içindeki kodları satır satır yaz. mesela 4 satır var for un içinde, ilk önce 1. satırın commentini kaldır ve çalıştır, kilitlenme olmuyorsa 2. satırı kaldır ve dene.. bu şekilde hangi satır kilitlenmeye sebep oluyorsa anlarsın.

    eğer bir exception türetseydi except bloğunda yakalanırdı. 

     

    normalde gui kilitlenmesinin sebebi ise ui ye bağlı olan threadde bir işlem yaptığında ui kilitlenir. ama işlem bitince yine çalışır. bunun için farklı bir thread yaratılıp, işlemler o thread üzerinden gerçekleşir. sen gui nin kilitlendiğini söyledin.  100 000 sayma işleminin bitmesini bekliyor olabilir. o yüzden yukarda dediğim gibi sayıyı küçült. mesela 10 yap. eğer sayım 10 da bitip gui kilitlenmesi bitiyorsa thread ayrılmamış demektir. farklı bir threadde bu işlemi yapman gerekiyor demektir. for döngüsü 100 bine kadar sayarken sen kilitlendi diyorsun ve kapatmaya çalışıyorsun, döngünün bitmesini beklemiyorsun da olabilir.. 

     

    neden windowsta böyle linux da böyle dersen bilmiyorum, öncelikle sorunu tespit edelim. ondan sonra açıklama yapmaya çalışırız


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo
    unbalanced bunu yazdı

    python dan anlamam hocam ama hatayı deneme yanılma yöntemi ile bulabilirsin.

    anladığım kadarıyla for a kadar geliyor. for un içindeki kodları commente al. sonra x değerini console/output/trace artık ne varsa oraya yazdır. bak bakalım for döngüsü sıkıntısız çalışıyor mu?

    eğer problem var ise for un değerini değiştir sayıyı küçültüp dene, olmadı for u kaldır ve kodunu öyle yaz.. o da olmadı üst taraftaki kodlara bak.

    eğer for sorunsuz çalıştıysa for un içindeki kodları satır satır yaz. mesela 4 satır var for un içinde, ilk önce 1. satırın commentini kaldır ve çalıştır, kilitlenme olmuyorsa 2. satırı kaldır ve dene.. bu şekilde hangi satır kilitlenmeye sebep oluyorsa anlarsın.

    eğer bir exception türetseydi except bloğunda yakalanırdı. 

     

    normalde gui kilitlenmesinin sebebi ise ui ye bağlı olan threadde bir işlem yaptığında ui kilitlenir. ama işlem bitince yine çalışır. bunun için farklı bir thread yaratılıp, işlemler o thread üzerinden gerçekleşir. sen gui nin kilitlendiğini söyledin.  100 000 sayma işleminin bitmesini bekliyor olabilir. o yüzden yukarda dediğim gibi sayıyı küçült. mesela 10 yap. eğer sayım 10 da bitip gui kilitlenmesi bitiyorsa thread ayrılmamış demektir. farklı bir threadde bu işlemi yapman gerekiyor demektir. for döngüsü 100 bine kadar sayarken sen kilitlendi diyorsun ve kapatmaya çalışıyorsun, döngünün bitmesini beklemiyorsun da olabilir.. 

     

    neden windowsta böyle linux da böyle dersen bilmiyorum, öncelikle sorunu tespit edelim. ondan sonra açıklama yapmaya çalışırız

    hocam dediklerini denedim, sayının büyüklüğüyle ilgisi olmadığını gördüm.

    Thread sorunsuz çalıştı ve bitti mesajını terminal ekranında görmeme rağmen GUI'deki label hep = "1" :)

    evet python bilen arkadaşlardan yardım bekliyorum.

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    tamam hocam senin dediklerinden sonra sorunu buldum sanırım. invalidate yapmak gerekiyor kontrolü.. yani yenilenmesi gerekiyor ve araştırdım baktım aynen öyleymiş :))

     

    from Tkinter import *
    import win32com.client
    Scope = win32com.client.dynamic.Dispatch('ScopeSim.Telescope')
    root=Tk()
    label = Label(root, text=Scope.SiderealTime)
    label.grid(row=0, sticky=W)
    
    def update_label():
        label.config(text=Scope.SiderealTime)
        label.after(1000, update_label)
    
    label.after(1000, update_label)
    

     

    mesela bu kod her 1000 ms(1 sn) de bir yenileniyor.. bunu kullanabilirsin döngünde


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    buralardaki değişik kod biçimlerini inceleyebilirsin

    http://stackoverflow.com/questions/2603169/python-tkinter-update-label-from-variable

    http://stackoverflow.com/questions/1918005/making-python-tkinter-label-widget-update/1918054#1918054 


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    uğraştığın için teşekkür ederim hocam ama ben WxPython GUI library kullanıyorum muhtemelen yazdığın onda olmaz ama bi deniyim

    Tkinter dediği python'un kendi library'si ve pek fazla bileşen yok içinde

Toplam Hit: 1824 Toplam Mesaj: 16