[Çözüldü] Tkinter Sorunu

Başlatan marslı, 09 Temmuz 2018 - 02:21:10

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

marslı

Merhaba arkadaşlar. istihza'daki tkinter kodunu olduğu gibi çalıştırıyorum. Belgeye göre donma sorunu olmaması gerekiyor.
#!/usr/bin/env python
#-*-coding:utf-8-*-
from Tkinter import *
import random

class Uygulama(object):
def __init__(self):
self.araclar()

def kodlar(self):
self.liste = []
for i in range(6):
while len(self.liste) != 6:
a = random.randint(1, 3)
if a not in self.liste:
self.liste.append(a)
self.etiket["text"] = self.liste

def araclar(self):
self.etiket = Label(text="Sayı üretmek için dü˘gmeye basınız!",
fg="white",
bg="#61380B",
font="Helvetica 12 bold")

self.etiket.pack()
self.dugme = Button(text="Yeniden", command = self.kodlar)
self.dugme.pack()
pencere = Tk()
pencere.geometry("300x50+600+460")
uyg = Uygulama()
mainloop()


Bu kodları çalıştırdığımda buton sonrası pencere donuyor. Sizde de oluyor mu? Çözümüne yardımcı olursanız sevinirim.

.py

multithreading, threading konusunu araştırmalısın.


marslı

threading ile şöyle bir ekleme yaptım ama bu sefer de buton tepki vermez oldu. Sanırım bi yeri yanış yaptım.

#!/usr/bin/env python
#-*-coding:utf-8-*-
from Tkinter import *
import random
import threading
class Uygulama(object):
   def __init__(self):
      self.araclar()
   def multi(self):
      t = threading.Thread(name="kodlar", target=self.kodlar)
      t.start()
   def kodlar(self):
      self.liste = []
      for i in range(2):
         while len(self.liste) != 6:
            a = random.randint(1, 10)
      if a not in self.liste:
         self.liste.append(a)
         self.etiket["text"] = self.liste
   def araclar(self):
      self.etiket = Label(text="Sayı üretmek için düğmeye basınız!",
      fg="white",
      bg="#61380B",
      font="Helvetica 12 bold")
      self.etiket.pack()
      self.dugme = Button(text="Yeniden", command = self.multi)
      self.dugme.pack()
pencere = Tk()
uyg = Uygulama()
mainloop()


.py

kanala gel yardımcı olmaya çalışıcam: https://discord.gg/khK22DT

bugra9

Merhaba,

Kodda hem yazım hem de mantık hatası bulunuyor. Biliyorsun python gibi dillerde girintiler çok önemli. if kontrolünün girintisi while döngüsünden bir tık içerde olmalı.

Mantık hatası olarak da "a = random.randint(1, 3)" kısmı ve sonrası bulunuyor. Birden üçe kadar rasgele bir sayı alıp bu sayı dizi içerisinde değilse diziye ekle diyorsun. Dizinin boyutu 6 olasıya kadar da işlemin tekrarlanması söyleniyor. Dolayısıyla boyut hiçbir zaman 6'ya ulaşamayacağı için sonsuz döngüye giriyor yani donuyor.

Kodu bu durumlara göre düzenleyip aşağıya yazıyorum.

#!/usr/bin/env python
#-*-coding:utf-8-*-
from Tkinter import *
import random

class Uygulama(object):
def __init__(self):
self.araclar()

def kodlar(self):
self.liste = []
for i in range(6):
while len(self.liste) != 6:
a = random.randint(1, 100)
if a not in self.liste:
self.liste.append(a)
self.etiket["text"] = self.liste

def araclar(self):
self.etiket = Label(text="Sayı üretmek için dü˘gmeye basınız!",
fg="white",
bg="#61380B",
font="Helvetica 12 bold")

self.etiket.pack()
self.dugme = Button(text="Yeniden", command = self.kodlar)
self.dugme.pack()
pencere = Tk()
pencere.geometry("300x50+600+460")
uyg = Uygulama()
mainloop()

.py

For ve while döngülrini kullanmadan şöylede yapabilirsin.


#!/usr/bin/env python
#-*-coding:utf-8-*-
from Tkinter import *
import random

class Uygulama(object):
def __init__(self):
self.araclar()
self.test =  range(100)

def kodlar(self):
self.liste = random.sample(self.test, 6)
self.etiket["text"] = self.liste

def araclar(self):
self.etiket = Label(text="Sayı üretmek için dü˘gmeye basınız!",
fg="white",
bg="#61380B",
font="Helvetica 12 bold")

self.etiket.pack()
self.dugme = Button(text="Yeniden", command = self.kodlar)
self.dugme.pack()
pencere = Tk()
pencere.geometry("300x50+600+460")
uyg = Uygulama()

mainloop()




marslı

@bugra9 kodu istihza dan aldım.  senin kodun çalışıyor teşekkür ederim.
@.py nin yardımıyla sorunu çözdüm. Konu kilitlenebilir .