TransWikia.com

tkinter error памагите

Stack Overflow на русском Asked on January 1, 2022

Написал код,не нажимаются кнопки,помогите,кому не трудно
Код:

from tkinter import *
from tkinter import messagebox
from tkinter import ttk

root = Tk()
root.title('Калькулятор')

#Логика калькулятора
def calc(key):
  global memory
  if key =='=':
    #исключаем написание букв
    strl ='-+0123456789.*/'
    if calc_entry.get()[0] not in strl:
        calc_entry.insert(END,"Первый символ не число!")
        messagebox.showerror('Ошибка!','Вы ввели не число')
    #Счёт
    try:
        result = eval(calc_entry.get())
        calc_entry.insert(END,'=' + str(result) )
    except:
        calc_entry.insert(END, 'Ошибка!')
        messagebox.showerror('Проверь правильность данных')
    #Clean
  elif key == 'C':
    calc_entry.delete(0,END)
    #from + to -
  elif key == '-/+':
    if '=' in calc_entry.get():
        calc_entry.delete (0, END)
    try:
      if calc_entry.get()[0] == '-':
          calc_entry.delete(0)
      else:
        calc_entry.insert(0,'-')
    except IndexError:
      pass
  else:
    if '=' == calc_entry.get():
            calc_entry.delete(0,END)
            calc_entry.insert(END,key)




#Add btth
btth_list = [
  '7','8','9','+','-',
  '4','5','6','*','/',
  '1','2','3','-/+','=',
  '0','.','C'
]
r = 1
c = 0

for i in btth_list:
  rel = ''
  cmd=lambda x=i: calc(x)
  ttk.Button(root, text=i, command=cmd).grid(row=r,column=c)
  c += 1
  if c>4:
    c=0
    r += 1

calc_entry=Entry (root, width=33)
calc_entry.grid(row=0, column=0, columnspan=5)

root.mainloop()

2 Answers

from tkinter import *
from tkinter import messagebox
from tkinter import ttk
from functools import partial
root = Tk()
root.title('Калькулятор')
button_list=[]
#Логика калькулятора
def calc(key):
           
  global memory
  
  if key =='=':
    #исключаем написание букв
    strl ='-+0123456789.*/'
    if calc_entry.get()[0] not in strl:
        calc_entry.insert(END,"Первый символ не число!")
        messagebox.showerror('Ошибка!','Вы ввели не число')
    #Счёт
    try:
        result = eval(calc_entry.get()[0:len(calc_entry.get())])
        calc_entry.insert(END,'=' + str(result) )
    except:
        calc_entry.insert(END, 'Ошибка!')
        messagebox.showerror('Проверь правильность данных')
    #Clean
  elif key == 'C':
    calc_entry.delete(0,END)
    #from + to -
  elif key == '-/+':
    if '=' in calc_entry.get():
        calc_entry.delete (0, END)
    try:
      if calc_entry.get()[0] == '-':
          calc_entry.delete(0)
      else:
        calc_entry.insert(0,'-')
    except IndexError:
      pass
  else:
           calc_entry.insert(END,key)




#Add btth
btth_list = [
  '7','8','9','+','-',
  '4','5','6','*','/',
  '1','2','3','-/+','=',
  '0','.','C'
]
r = 1
c = 0

for i in btth_list:
  rel = ''
  button_list.append(ttk.Button(root, text=i, command=partial(calc,i)).grid(row=r,column=c))
  c += 1
  if c>4:
    c=0
    r += 1

calc_entry=Entry (root, width=33)
calc_entry.grid(row=0, column=0, columnspan=5)

root.mainloop()

Answered by cyr oil on January 1, 2022

#1. Не было функции ввода чисел
#2. В функции подсчета('=') не было защиты от пустого ввода(выдавало ошибку)
#3. PEP 8 был частично утерян, что понизило читаемость
from tkinter import *
from tkinter import ttk
from tkinter import messagebox

root = Tk()
root.title('Калькулятор')
n = 0

# n - индекс элемента(сколько чисел введено)
# Логика калькулятора
def calc(key):
    global memory, n
    if key == '=':
        # исключаем написание букв
        strl = '-+0123456789.*/'
        if len(calc_entry.get()) != 0:
            if calc_entry.get()[0] not in strl:
                calc_entry.insert(END, "Первый символ не число!")
                messagebox.showerror('Ошибка!', 'Вы ввели не число')
                # Счёт
        try:
            result = eval(calc_entry.get())
            calc_entry.insert(END, '=' + str(result))
        except:
            calc_entry.insert(END, 'Ошибка!')
            messagebox.showerror('Ошибка!','Проверь правильность данных')
         # Clean
    elif key == 'C':
        calc_entry.delete(0, END)
        # from + to -
    elif key == '-/+':
        if '=' in calc_entry.get():
            calc_entry.delete(0, END)
        try:
            if calc_entry.get()[0] == '-':
                calc_entry.delete(0)
            else:
                calc_entry.insert(0, '-')
        except IndexError:
            pass
    else:
        calc_entry.insert(n, key)
        n += 1
        # если это не "+/-", '=' или 'C', то добавляем элемент в позицию n(последнию)

# Add btth
btth_list = ['7', '8', '9', '+', '-','4', '5', '6', '*', '/','1', '2', '3', '-/+', '=','0', '.', 'C']
r = 1
c = 0

for i in btth_list:
    rel = ''
    cmd = lambda x=i: calc(x)
    ttk.Button(root, text=i, command=cmd).grid(row=r, column=c)
    c += 1
    if c > 4:
        c = 0
        r += 1

calc_entry = Entry(root, width=33)
calc_entry.grid(row=0, column=0, columnspan=5)

root.mainloop()

Answered by Scriptkiddie272 on January 1, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP