簡體   English   中英

是否可以使用 tkinter 獲取標簽變量並放入列表中

[英]Is it possible to grab a label variable and put into list with tkinter

我創建了一個溫度轉換器程序,其中來自條目小部件的計算溫度顯示在單獨的標簽中,我需要做的是獲取轉換后的變量並將其放入列表中。

我認為將連接的條目小部件連接到標簽小部件可以在它們連接的地方工作,因此我可以使用 .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()

可以通過文本屬性 labelwidgetname['text'] 訪問 tk.Label 顯示的值。 根據您希望更新存儲值的獨立列表的時間和方式,有多種選擇。 該示例顯示了用戶需要按下提交按鈕的情況。 例如,這可以在執行溫度計算時進行調整。

當然,直接在腳本中已導出標簽文本的計算溫度的點處更新存儲值列表會更簡單。

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()

嘗試制作一個這樣的功能

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM