Tkinter button ile gönderilen fonksiyonun geriye değer döndürmesi

Merhaba, pydroid 3 ile telefonumda Python program yazmaya çalışıyorum. Bir ana sayfa olusturabildim. Bu ana sayfada on numara, şans topu, sayısal loto butonları var. Mesela “on numara” butonuna tıkladığımda on numara fonksiyonuna gönderiyorum burada yeni bir pencere oluşturuyorum ve “kaç kolon oynama istersin” label ve entry ile “oyna” butonu ve “çıkış” butonu koyuyorum. Entry içine rakam yazıp samples ve random ile entry içine girdiğim sayı kadar kolon oynamak istiyorum ve buradan dönen liste yi aynı pencerede yeni bir label ile göstermek istiyorum.
Sıkıntım oynayacağım kolon sayısını geriye döndürememek. Bu konuda yardımcı olursanız çok iyi olur.
Not : Python dilini yeni öğreniyorum. Öğrenmek için bir proje düşünerek başlıyorum. Terminal üzerinde bu düşüncemi gerçekleştirdim sıra görsele geldi tkinter de takıldım.

Buraya kod nasıl eklenir bilmiyorum

from tkinter import*
import random
import datetime

master = Tk()
def onOyna():
	def onGonder(giris):
		if giris != "":
			l6 = Label(onScreen, text = giris).pack()
		else:
			pass
		
	an = datetime.datetime.now()
	simdi = datetime.datetime.strftime(an, '%x %X')
	master.destroy
	onScreen = Tk()
	onScreen.geometry('500x750')
	onScreen.title('On Numara')
	x = ""
	l1 = Label(onScreen, text = simdi).pack()
	l2 = Label(onScreen).pack()
	l3 = Label(onScreen, text = "Kaç kolon oynamak istersiniz ?").pack()
	e1 = Entry(onScreen, width = 5).pack()
	l4 = Label(onScreen).pack()
	b1 = Button(onScreen, text = "OYNA", command = onGonder(x)).pack()
	l5 = Label(onScreen).pack()
	b2 = Button(onScreen, text = " Çıkış", command = onScreen.destroy).pack()
		
	onScreen.mainloop()
	
	
def sansOyna():
	pass
def superOyna():
	pass
def sayisalOyna():
	pass
			
l1 = Label(master, text = "Oynamak istediğiniz oyunu seçin").pack()
l2 =Label(master).pack()
b1 = Button(master, text = "ON NUMARA", command = onOyna, width = 25).pack()
l3 = Label(master).pack()
b2 = Button(master, text = "ŞANS TOPU", command = sansOyna, width = 25).pack()
l4 = Label(master).pack()
b3 = Button(master, text = "SÜPER LOTO", command = superOyna, width = 25).pack()
l5 = Label(master).pack()
b4 = Button(master, text = " SAYISAL LOTO", command = sayisalOyna, width = 25).pack()
l6 = Label(master).pack()
b5 = Button(master, text = "ÇIKIŞ", width = 25, command = master.destroy).pack()

master.mainloop()

Bildiğim kadarıyla pydroid üzerinde tkinter kullanamıyoruz.

Pardon qpython3 ile karıştırmışım. :blush:

Merhaba, aşağıdaki kodları, size bir fikir vermesi için inceleyebilirsiniz.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


from tkinter import*
import random
import datetime

master = Tk()


def onGonder(widget):
    a = [[random.randint(0, 80) for j in range(10)] for i in range(int(widget.get()))]
    print(a)
    return a


def onOyna():	
	an = datetime.datetime.now()
	simdi = datetime.datetime.strftime(an, '%x %X')
	master.destroy
	onScreen = Tk()
	onScreen.geometry('500x750')
	onScreen.title('On Numara')
	x = ""
	l1 = Label(onScreen, text = simdi).pack()
	l2 = Label(onScreen).pack()
	l3 = Label(onScreen, text = "Kaç kolon oynamak istersiniz ?").pack()
	e1 = Entry(onScreen, width = 5)
	e1.pack()
	l4 = Label(onScreen).pack()
	b1 = Button(onScreen, text = "OYNA", command = lambda: onGonder(e1))
	b1.pack()
	l5 = Label(onScreen).pack()
	b2 = Button(onScreen, text = " Çıkış", command = onScreen.destroy)
	b2.pack()
		
	onScreen.mainloop()
	
	
def sansOyna():
	pass
def superOyna():
	pass
def sayisalOyna():
	pass
		
			
l1 = Label(master, text = "Oynamak istediğiniz oyunu seçin").pack()
l2 =Label(master).pack()
b1 = Button(master, text = "ON NUMARA", command = onOyna, width = 25)
b1.pack()
l3 = Label(master).pack()
b2 = Button(master, text = "ŞANS TOPU", command = sansOyna, width = 25)
b2.pack()
l4 = Label(master).pack()
b3 = Button(master, text = "SÜPER LOTO", command = superOyna, width = 25)
b3.pack()
l5 = Label(master).pack()
b4 = Button(master, text = " SAYISAL LOTO", command = sayisalOyna, width = 25)
b4.pack()
l6 = Label(master).pack()
b5 = Button(master, text = "ÇIKIŞ", width = 25, command = master.destroy)
b5.pack()

master.mainloop()

Buradaki ‘lambda’ olayını tam olarak anlayamadım. Daha önce de bir sorumda çözümü ‘lambda’ ile yine siz çözmüştünüz.
Acaba fonksiyon içinden fonksiyon çağırmak ile mi ilgili?

button'un command parametresine fonksiyonu fonksiyon() şeklinde yazarsanız, düğmeye basmadan fonksiyon aktif edilir. Eğer fonksiyonun aldığı bir parametre varsa, bu kez lambda: fonksiyon(onGonder) şeklinde fonksiyonu çağırmalısınız. lambda da bir fonksiyondur. Dediğiniz gibi bu fonksiyonla başka bir fonksiyonu çağırmış oluyoruz.

1 Beğeni

o gönder fonksiyonunda return a ile değeri geri gonderbiliyoruz galiba. Peki dönen değeri nasıl alabilirim?
Mesela x = onGonder(y) olarak buttonun hemen alt satırına yazsam dönen değeri alabilirmiyim?

Tabi alabilirsiniz. def fonksiyonlarında return ifadesi varsa, o fonksiyonu sizin gösterdiğiniz gibi x = onGonder(y) şeklinde çağırırsanız, return edilen değer, değişkenin değeri olur.

1 Beğeni

Çok teşekkür ederim.

1 Beğeni

Rica ederim iyi çalışmalar.

1 Beğeni