Otomatik buton oluşturup tuşları ekrana yazdırma

Daha önce ilettim ama sorunu çözemedim. Kodu ve beceremediğim kodu ekliyorum.

Blok alıntı

====================
import tkinter as tk
from tkinter import *

tk=Tk()
tk.title(“hesap Makinası”)
tk.geometry(“0x0”)
tk.configure(background=“black”)

x_konum = 60
y_konum = 800

def cmd(txt):
#basılan tuşu yazalım
ekran=Label(tk,text=txt,font="Arial 16 ",fg=“gray”,bg=“black”).place(x=10,y=100)
return

#otomatik buton oluştur
sayi = 1
for _ in range(3):
for _ in range(3):
Button(tk,text=sayi,font=“Akrobat 20 bold”,bg=“black”,fg=“white”,bd=5,command= lambda : cmd(sayi)).place(x=x_konum, y=y_konum, width=200, height=200)
sayi += 1
x_konum += 250
x_konum = 60
y_konum += 250

tk.mainloop()

Blok alıntı

Butonda Command bağlamasını yapamadım. Bilgim yetersiz. Buton otomatik olmayınca yazdırıyorum ama butonları otomatikleştirince command bağlaması görevini yapamadı. Bir mantık yada kod oluşturma hatam var.

düzenlenmiş kod burda:

from tkinter import *

tk = Tk()
tk.title("Hesap Makinesi")
tk.geometry("800x1000")
tk.configure(background="black")

ekran = Label(tk, text="", font="Arial 24", fg="gray", bg="black")
ekran.place(x=10, y=10)

def cmd(txt):
    ekran.config(text=str(txt))

sayi = 1
y_konum = 100
for i in range(3):
    x_konum = 60
    for j in range(3):
        Button(tk, text=str(sayi), font="Arial 20 bold", bg="black", fg="white", bd=5, command=lambda s=sayi: cmd(s)).place(x=x_konum, y=y_konum, width=200, height=200)
        sayi += 1
        x_konum += 250
    y_konum += 250

tk.mainloop()

Yardımlarınız için Teşekkür ederim… Burada sizin kodlar düzgün görünüyor. Ben yapıştırınca tablar kayboluyor. Konu kısmına direkt yapıştırınca orijinal kod değişiyor. Bunu yapaken konu dışında bir yere mi yapıştırıyorsunuz

Konuyu yanıtlarken yapıştırdığınız kodu seçin, sağ üstteki dişli çark simgesine dokunup en baştaki seçenek olan “önceden biçimlendirilmiş metin” öğesini seçin. Aşağıda sizin için basit bir örnek yaptım

1 Beğeni

Teşekkür ederim.

import tkinter as tk
from tkinter import *
import math
from sympy import sympify
tk=Tk()
tk.title("hesap Makinası")
tk.geometry("350x3500")
tk.configure(background="black")
tablo=["C","%","√","÷","1","2","3","*","4","5","6","-","7","8","9","+",".","0","⌫","="]
buton=[]
x_konum = 60
y_konum = 900
ekran=Label(tk,text="Calculator",font="Arial 15 bold  ",fg="yellow",bg="black",bd=50)
ekran.place(x=0,y=0)
#işlemlerin göründüğü yer
ekrani=Label(tk,text="İşlemler :",font="Arial 20 bold",fg="magenta",bg="black",bd=50)
ekrani.place(x=10,y=150)

ekranit = Label(tk, text="", font="Arial 20 bold", fg="white", bg="black", anchor="e")
ekranit.place(x=10, y=350, width=780, height=150)

#sonuç kısmı
ekrans=Label(tk,text="Sonuç : ",font="Arial 20 bold",fg="orange",bg="black",bd=50)
ekrans.place(x=20,y=475)

result=Label(tk,text="",font="Arial 20 bold",fg="white",bg="black")
result.place(x=50,y=675)

def yüzdeal(txt):
	   yüz=txt
	   syüz=""
	   for v in yüz:
	   	if v !="%":
	   		syüz=syüz+v
	   	else:
	   		syüz=syüz+"*"
	   #result["text"]=float(sympify(syüz)/100)
	   result["text"]=float(eval(syüz)/100)

def kökal(kök):
	   k=int(bilgi[1:])	   
	   result["text"]=round(float(math.sqrt(k)),2)

giris=""
bilgi=""
def hesapla():
    global giris
    global bilgi  
    try:
        # '% ve √ işareti için özel durum
        for i in giris:            
            if i=="%":                
                yüzdeal(bilgi)
                return
            elif i=="√":
                kökal(bilgi)
                return                           
        #giris = giris.replace("%", "/100")
        sonuc = str(eval(giris))
        result.config(text=sonuc)
        giris = sonuc
    except:
        result.config(text="Hata")
        giris = ""

def temizle():
    global giris
    giris = ""
    ekranit.config(text="")
    result.config(text="")

def islem(karakter):
    global giris
    global bilgi
    if karakter=="⌫":
        giris=giris[:-1]
        ekranit.config(text=giris)
    else:
        giris += str(karakter)
        ekranit.config(text=giris)
        bilgi=giris
    
sayi = 0
for i in range(5):
	for j in range(1,5):
		text=tablo[sayi]
		if text == '=':
		  	command = hesapla
		elif text == 'C':
		  	command = temizle	
		else:
		      command = lambda txt=text: islem(txt)
		if  not tablo[sayi].isdigit():    		
		    Button(tk,text=text,font="Arial 20 bold",bg="green",fg="white",bd=15,activebackground="red",activeforeground="white",command=command).place(x=x_konum, y=y_konum, width=200, height=200)  
		else:				
			Button(tk,text=text,font="Arial 20 bold",bg="black",fg="white",bd=15,activebackground="orange",command=command).place(x=x_konum, y=y_konum, width=200, height=200)
		sayi += 1
		x_konum += 250
	x_konum = 60
	y_konum += 250
tk.mainloop()

Ok… çok teşekkürler.. inan olun bilmiyordum. Çok sağolun.

1 Beğeni
import tkinter as tk
from tkinter import *
import math
from sympy import sympify
tk=Tk()
tk.title("hesap Makinası")
tk.geometry("350x3500")
tk.configure(background="black")
tablo=["C","%","√","÷","1","2","3","*","4","5","6","-","7","8","9","+",".","0","⌫","="]
buton=[]
x_konum = 60
y_konum = 900

#işlemlerin göründüğü yer
ekrani=Label(tk,text="İşlemler :",font="Arial 20 bold",fg="magenta",bg="black",bd=10)
ekrani.place(x=0,y=180)

ekranit = Label(tk, text="", font="Arial 20 bold", fg="white", bg="black", anchor="e")
ekranit.place(x=10, y=350, width=780, height=150)

#sonuç kısmı
ekrans=Label(tk,text="Sonuç :",font="Arial 20 bold",fg="orange",bg="black",anchor="s")
ekrans.place(x=0,y=475)

result=Label(tk,text="",font="Arial 20 bold",fg="white",bg="black")
result.place(x=10,y=675)

def yüzdeal(txt):
	   yüz=txt
	   syüz=""
	   for v in yüz:
	   	if v !="%":
	   		syüz=syüz+v
	   	else:
	   		syüz=syüz+"*"
	   #result["text"]=float(sympify(syüz)/100)
	   s100=float(eval(syüz)/100)
	   syüzz= f"{s100:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")	   
	   result["text"]=syüzz
	   #result["text"]=float(eval(syüz)/100)

def kökal(kök):
	   k=int(bilgi[1:])
	   kk=round(float(math.sqrt(k)),2)	   
	   kkk = f"{kk:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")
	   result["text"]=kkk 
	   #result["text"]=round(float(math.sqrt(k)),2)
	   
giris=""
bilgi=""
def hesapla():
    global giris
    global bilgi  
    try:
        # '% ve √ işareti için özel durum
        for i in giris:            
            if i=="%":                
                yüzdeal(bilgi)
                return
            elif i=="√":
                kökal(bilgi)
                return                           
        #giris = giris.replace("%", "/100")
        sonuc = str(eval(giris))
        fsonuc=int(sonuc)
        formatted = f"{fsonuc:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")
        result.config(text=formatted)
        #result.config(text=sonuc)
        giris = sonuc
    except:
        result.config(text="Hata")
        giris = ""

def temizle():
    global giris
    giris = ""
    ekranit.config(text="")
    result.config(text="")

def islem(karakter):
    global giris
    global bilgi
    if karakter=="⌫":
        giris=giris[:-1]
        ekranit.config(text=giris)
    else:
        giris += str(karakter)
        ekranit.config(text=giris)
        bilgi=giris
    
sayi = 0
for i in range(5):
	for j in range(1,5):
		text=tablo[sayi]
		if text == '=':
		  	command = hesapla
		elif text == 'C':
		  	command = temizle	
		else:
		      command = lambda txt=text: islem(txt)
		if  not tablo[sayi].isdigit():    		
		    Button(tk,text=text,font="Arial 20 bold",bg="green",fg="white",bd=15,activebackground="red",activeforeground="white",command=command).place(x=x_konum, y=y_konum, width=200, height=200)  
		else:				
			Button(tk,text=text,font="Arial 20 bold",bg="black",fg="white",bd=15,activebackground="orange",command=command).place(x=x_konum, y=y_konum, width=200, height=200)
		sayi += 1
		x_konum += 250
	x_konum = 60
	y_konum += 250
tk.mainloop()

Düzenlenmiş kod olarak attığım kodda hataların giderilmiş olması lazım o kod bende calışıyor.

Evet sorunları hallettim. Otomatik butonda lambda ile olması gerektiğini öğrendim.

1 Beğeni