создание кнопки с ткинтером - PullRequest
0 голосов
/ 21 января 2019

Мне было действительно любопытно, почему я не могу заставить add_button работать, окно не открывается при его создании.

from tkinter import *
class Calculator:

#-------------------------------------------------               
    def __init__(self, master):

        self.master = master 

        master.title("Calculator")

        self.close_button = Button(master, text = "Close", command = master.destroy)        

        Label(master, text = "First Digit").grid(row = 0)
        Label(master, text = "Second Digit").grid(row = 1)

        self.input1 = 0
        self.input2 = 0

        input1 = Entry(master)
        input2 = Entry(master)

        input1.grid(row = 0, column = 1)
        input2.grid(row = 1, column = 1)


        self.close_button.grid(row = 2, column = 0)

        self.add_buton = Button(master, text = "Add", command = self.add())
        self.add_button.grid(row = 2, column = 1)                              

        master.configure(background = 'grey')

        return 

#-------------------------------------------------

    def add(self):
            return self.input1.get() + self.input2.get()   

#-------------------------------------------------



#-------------------------------------------------
root = Tk()
calc = Calculator(root)
root.mainloop()
#-------------------------------------------------

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Попробуйте это:

from tkinter import Button, Entry, Label, Tk


class Calculator:

    """DOCSTRING"""

    def __init__(self, master):
        master.title("Calculator")
        master.configure(background='grey')

        button = dict()
        button['master'] = master
        button['text'] = 'Close'
        button['command'] = master.destroy
        close_button = Button(**button)

        Label(master, text='First Digit').grid(row=0)
        Label(master, text='Second Digit').grid(row=1)

        entry = dict()
        entry['bd'] = 5
        entry['width'] = 35
        entry['background'] = 'gray35'
        entry['foreground'] = 'snow'
        self.input1 = Entry(**entry)
        self.input2 = Entry(**entry)

        self.input1.grid(row=0, column=1)
        self.input2.grid(row=1, column=1)
        close_button.grid(row=2, column=0)
        add_button = Button(master, text="Add", command=self.add)
        add_button.grid(row=2, column=1)


    def add(self):
        val = int(self.input1.get()) + int(self.input2.get())
        print(val)


root = Tk()
calc = Calculator(root)
root.mainloop()
0 голосов
/ 21 января 2019

Добро пожаловать в стек!

Я просмотрел ваш код, я смог сделать то, что вы просите. В вашем коде было несколько ошибок:

а) у вас было self.add_buton и self.add_button, что вызвало ошибку.

b) self.input1 = 0 и self.input2 = 0 не требуются.

c) Вы вызывали self.add() в качестве команды, и вы должны вызывать self.add. При вызове в качестве команды вам не нужно ()

d) input1 = Entry(master) должно быть self.input1 = tk.Entry(master)

e) Вы должны преобразовать свои входные значения в int или float, иначе это будет просто одно значение в конце другого. (Например, 1 + 5 = 15, тогда как int(1) + int(5) = 6

Вот ваш код с полями ввода, работающими как надо. У меня import tkinter as tk, следовательно, почему это tk.Entry

from tkinter import *
import tkinter as tk
class Calculator:

#-------------------------------------------------               
    def __init__(self, master):

        self.master = master 

        master.title("Calculator")

        self.close_button = Button(master, text = "Close", command = master.destroy)        

        Label(master, text = "First Digit").grid(row = 0)
        Label(master, text = "Second Digit").grid(row = 1)

        self.input1 = tk.Entry(bd=5, width=35, background='gray35', foreground='snow')
        self.input2 = tk.Entry(bd=5, width=35, background='gray35', foreground='snow')

        self.input1.grid(row = 0, column = 1)
        self.input2.grid(row = 1, column = 1)


        self.close_button.grid(row = 2, column = 0)

        self.add_button = tk.Button(master, text = "Add", command = self.add)
        self.add_button.grid(row = 2, column = 1)                              

        master.configure(background = 'grey')

        return 

#-------------------------------------------------

    def add(self):
        val = self.input1.get()
        print(val)

#-------------------------------------------------



#-------------------------------------------------
root = Tk()
calc = Calculator(root)
root.mainloop()

Теперь это должно работать так, как вы этого хотели. Переменные внутри записи могут быть изменены в соответствии с требованиями. Вы правильно назвали значение записи с self.input1.get().

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...