Добавление текстового поля в Tkinter - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу запрограммировать простой «калькулятор». Некоторые поля ввода, затем некоторые вычисления с этими входами в фоновом режиме, а затем я хочу увидеть вывод.

В простой форме это выглядит так:

enter image description here

ae: поля ввода.

fh: поля вывода.

Расчеты в фоновом режиме и показ вывода идет хорошо.

Теперь я хочу иметь строку между e и f, которая говорит: Output

Без какого-либо поля ввода или sth .. только текстовое поле. Может кто-нибудь помочь мне, как вставить текстовое поле в определенном c месте? Это код:

fields = ('a', 'b', 'c', 'd', 'e',
          'f (in EUR)', 'g (days per year)', 'h in %')

def initUI(self):

    self.master.title("Calculator")
    self.pack(fill=BOTH, expand=1)

    Style().configure("TFrame", background="#111")


    bardejov = ImageTk.PhotoImage(bard)
    label1 = Label(self, image=bardejov)
    label1.image = bardejov
    label1.place(x=20, y=20)

def total_assets(entries):
    # period rate:
    a = (float(entries['a'].get()))
    b = (float(entries['b'].get()))
    c =  (float(entries['c'].get()))
    d = (float(entries['d'].get()))
    e = (float(entries['e'].get()))

entries['f'].insert(0, calc1 )
    entries['g'].insert(0, np.round( calc2 ) )
    entries['h'].insert(0, calc3 )
#calc1,cal2,calc3 are some calculations with the input fields

def makeform(root, fields):
    entries = {}
    for field in fields:
        print(field)
        row = tk.Frame(root)
        lab = tk.Label(row, width=50, text=field+": ", anchor='w')
        ent = tk.Entry(row)
        ent.insert(0, "0")
        row.pack(side=tk.TOP, 
                 fill=tk.X, 
                 padx=5, 
                 pady=5)
        lab.pack(side=tk.LEFT)
        ent.pack(side=tk.RIGHT, 
                 expand=tk.YES, 
                 fill=tk.X)
        entries[field] = ent
        ent.config(background="gray")
    return entries


if __name__ == '__main__':

    root = tk.Tk()
    root.title("hello")
    root.columnconfigure(1, weight=1)
    #root.geometry("1000x300") #Width x Height
    #root.grid_columnconfigure("50")

    ents = makeform(root, fields)
    b1 = tk.Button(root, text='do',
           command=(lambda e=ents: total_assets(e)))
    #ents.place(x=10, y=115, height=30, width=200)
    b1.pack(side=tk.LEFT, padx=5, pady=5)
    b2 = tk.Button(root, text = "reset",
                   command=(lambda e=ents: restart_program(e)))
    b2.pack(side=tk.LEFT, padx=5, pady=5)
    root.mainloop()

1 Ответ

2 голосов
/ 02 апреля 2020

Вы можете использовать приведенный ниже код для создания разделителя с текстом:

def create_separator(parent, text=None):
    frame = tk.Frame(parent)
    frame.columnconfigure(0, weight=1)
    ttk.Separator(frame, orient=tk.HORIZONTAL).grid(row=0, column=0, sticky='ew')
    if text:
        tk.Label(frame, text=text).grid(row=0, column=0, padx=10, sticky='w')
    return frame

Затем внутри для l oop из makeform():

for field in fields:
    ...
    ent.config(background="gray")
    if field == 'e':
        # add a separator
        sep = create_separator(root, 'Output')
        sep.pack(side=tk.TOP, fill=tk.X, padx=5, pady=5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...