Можно ли получить переменную метки и поместить в список с помощью tkinter? - PullRequest
0 голосов
/ 05 октября 2018

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

Я думаю, что создание связанного виджета записи с виджетом метки будет работать там, где они подключены, поэтому я могу получить переменную с помощью метода .get, но это будет выглядеть ужасно грязно.Есть ли другой способ, которым я мог бы продолжить это?

Это мой первый пост, и я новичок в Python, очень жаль, если код выглядит грязным и если я включил слишком много кода.

data = []
tempVal = "Celcius"

def store_temp(sel_temp):
    global tempVal
    tempVal = sel_temp

class Calculator:
    def __init__(self, num_a, num_b):
        self.num_a= num_a
        self.num_b = num_b

def convert(self):
    if tempVal == 'Fahrenheit':
        return float((float(self.num_a) - 32)* 5 / 9)
    if tempVal == 'Celcius':
        return float((float(self.num_a) * 9/ 5) + 32)

def display_add(entry_numa,entry_numb,label_answer):
   #get the value from entry_numa
    num_a = entry_numa.get()
    num_b = entry_numb.get()

num_a = str(num_a)
num_b = str(num_b)
#create an object
global data
calc = Calculator(num_a,num_b)

label_answer['text'] = calc.convert()

data += [calc]

def calc_history():
global data 
#creat e another window
window_calc_list = Tk()
window_calc_list.geometry("400x200")

#create a listbox

listbox_calc_list = Listbox(window_calc_list, width= 300)
listbox_calc_list.pack()
listbox_calc_list.insert(END, "list of data")

for info in data:

   listbox_calc_list.insert(END, str(info.num_a) + " " + str(info.num_b) + " " )

window_calc_list.mainloop()

def main():
window = Tk()
window.geometry("500x150")

validate_letter = window.register(only_letters)
validate_nb = window.register(only_numbers_max_3)


label = Label(window, width = 30, background = 'lightblue', text='enter temperature, only numbers')
label.grid(row=0, column=0)

entry_numa = Entry(window, width = 30, validate="key", validatecommand=(validate_nb, '%d', '%P'))
entry_numa.grid(row = 0, column = 1)

#create another label and entry object for num_b

label_numb = Label(window, width = 30, background = 'lightblue', text='enter location, only letters')
label_numb.grid(row=1, column=0)

entry_numb = Entry(window, width = 30, validate="key", validatecommand=(validate_letter, '%d', '%S'))
entry_numb.grid(row = 1, column = 1)

#create another label to display answer
label_answer = Label(window, width = 30, background = 'lightyellow')
label_answer.grid(row = 2, column = 1)

entry_answer = Entry(window, width = 30)
entry_answer.grid(row = 2, column = 0)


button_add = Button(window, text = "ADD", command = lambda: display_add(entry_numa,entry_numb,label_answer))
button_add.grid(row=3, column = 0)


button_delete = Button(window, text = "DELETE", command = lambda: delete_data(data))
button_delete.grid(row=3, column = 2)

#create another button to display all previous calculations
button_display = Button(window,text = "calc_history", command = lambda: calc_history())
button_display.grid(row=3, column = 1)

var = StringVar()

dropDownList = ["Celcius", "Fahrenheit"]
dropdown = OptionMenu(window, var,dropDownList[0], *dropDownList, command=store_temp)
dropdown.grid(row=0, column=2)


window.mainloop()

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

попробуйте сделать функцию, подобную этой

def letterused():

converter=(letter.get())< letter is a entry box at the bottom is the code

converted.set(converter)

for i in range(1):

used_letters1.append(converter)<list

letter = ttk.Entry(root, width = 20,textvariable = letter)

letter.pack()
0 голосов
/ 05 октября 2018

Доступ к отображаемому значению tk.Label можно получить через свойство text, labelwidgetname ['text'].В зависимости от того, когда и как вы хотите обновить независимый список сохраненных значений, существует множество вариантов.В примере показано, нужно ли пользователю нажимать кнопку отправки.Это может быть адаптировано, например, когда выполняется вычисление температуры.

Конечно, было бы проще обновить список сохраненных значений непосредственно в той точке сценария, где вычисленная температура для текста метки имеетбыло получено.

import tkinter as tk
stored_values = []

def add_labelvalue_tolist(temp):
    '''Store label value to list.'''
    stored_values.append(temp)
    print('contents of list', stored_values)

def add_entry_tolabel(event):
    display_label['text'] = user_entry.get()

ROOT = tk.Tk()

user_entry = tk.Entry()
user_entry.grid(column=0, row=0)
user_entry.bind('<KeyRelease>', add_entry_tolabel)
display_label = tk.Label()
display_label.grid(column=1, row=0)

# update list via button command linked to label text value
add_button = \
    tk.Button(text='add to list',
              command=lambda:add_labelvalue_tolist(display_label['text']))
add_button.grid(column=0, row=1)
ROOT.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...