簡體   English   中英

訪問使用 for 循環創建的條目小部件數據以進行繪圖

[英]Accessing entry widget data creating using for loop for plotting purposes

我是編程新手,我已經創建了這個 GUI,我的應用程序嘗試通過兩列條目小部件從用戶那里收集幾個輸入浮點數據,然后將數據存儲到一個列表中,以便我以后可以 plot 這些數據在二維 plot 上。 我創建了一個包含最多 20 行的小部件表,用戶通過組合框根據他們的數據定義它們。

我現在的問題是如何訪問用戶輸入到這些條目的數據並將它們存儲在列表中,以便我可以使用 plot 使用matplotlib

請指教。

from tkinter import *
import tkinter as tk
from tkinter import ttk
from tkcalendar import *
from tkinter.ttk import *


window=Tk()
window.title ("xxxx")

wrapper2=LabelFrame(window,text='xxx Data')
wrapper2.pack(side=LEFT, fill="both",expand="yes",padx=10,pady=10)

###Table###

l4=tk.Label(wrapper2, text="Number Of Points")
l4.grid(row=0,column=0,columnspan=2)


Text_4=IntVar()
b1=ttk.Combobox(wrapper2,width=2,textvariable=Text_4,state='readonly')
b1["value"]=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
b1.grid(row=0,column=2)


l5=tk.Label(wrapper2, text="(Meters)")
l5.grid(row=1,column=1)

l6=tk.Label(wrapper2, text="Pre ")
l6.grid(row=1,column=2)

def table_generation():  
    
    rows=int(Text_4.get())
    X_Depth=[]
    Y_Pressure=[]
    
    
    entryvar=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
    entryname=["ae","be","ce","de","ee","fe","ge","he","ie","je","ke","le","me","ne","oe","pe","qe","re","se","te","ue","ve","we","xe","ye","ze"]
    
    for i in range(rows):
        l4=tk.Label(wrapper2, text=i+1)
        l4.grid(row=i+2,column=0)
        
        for depth_col in range(0,1):
            entryvar[i]=DoubleVar()
            entryname[i] = Entry(wrapper2, text=entryvar[i])
            entryname[i].grid(row=i+2, column=depth_col+1)
            entryname[i].bind("<KeyRelease>",  X_Depth.append(entryvar[i].get()))
            X_Depth.append(entryname[i].get())
            
        for press_col in range(1,2):
            entryvar[i]=DoubleVar()
            entryname[i] = Entry(wrapper2, text=entryvar[i])
            entryname[i].grid(row=i+2, column=press_col+1)
            entryname[i].bind("<KeyRelease>",  Y_Pressure.append( entryvar[i].get()))
            Y_Pressure.append( entryname[i].get())     
      
       
    print(X_Depth)
    print(Y_Pressure) 
    
b1=Button(wrapper2, text='Generate',command=table_generation)
b1.grid(row=0,column=3) 

window.mainloop()

如果我在 combobox 小部件中輸入值 5,例如將生成 5 行,並且用戶可以輸入 values.hovwever,當將值輸入到條目中時,列表 X_Depth 和 Y_Pressure 不會隨用戶輸入而更新,而是保持不變顯示 5 個零,如下所示。

[0.0, '0.0', 0.0, '0.0', 0.0, '0.0', 0.0, '0.0', 0.0, '0.0'] [0.0, '0.0', 0.0, '0.0', 0.0, '0.0', 0.0, '0.0', 0.0, '0.0']

我不知道如何使用matplotlib ,但下面的代碼顯示了如何以我認為你想要的方式從用戶那里獲取數據(我在評論中建議)。 一旦弄清楚如何執行該部分,您就可以輕松地將新添加的“獲取列表”按鈕更改為輸入的 plot 數據。

from tkinter import *
import tkinter as tk
from tkinter import ttk
from tkcalendar import *
from tkinter.ttk import *


window = Tk()
window.title("xxxx")

wrapper2 = LabelFrame(window,text='xxx Data')
wrapper2.pack(side=LEFT, fill="both", expand="yes", padx=10, pady=10)

###Table###

l4=tk.Label(wrapper2, text="Number Of Points")
l4.grid(row=0, column=0, columnspan=2)

Text_4 = IntVar()
b1 = ttk.Combobox(wrapper2, width=2, textvariable=Text_4, state='readonly')
b1["value"] = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
b1.grid(row=0, column=2)

l5 = tk.Label(wrapper2, text="(Meters)")
l5.grid(row=1, column=1)

l6 = tk.Label(wrapper2, text="Pre ")
l6.grid(row=1, column=2)

row_labels = []  # Global
depth_entries, depth_vars = [], []  # Global
pressure_entries, pressure_vars = [], []  # Global
btn_get = None
X_Depth, Y_Pressure = [], []

def table_generation():
    ''' Generate row widgets. '''

    global btn_get

    def destory_widgets(*widget_lists):  # Helper func.
        ''' Destroy and clear lists of widgets. '''
        for widget_list in widget_lists:
            for widget in widget_list:
                widget.destroy()
            widget_list.clear()

    if btn_get:
        btn_get.destroy()
        btn_get = None
    destory_widgets(row_labels, depth_entries, pressure_entries)

    for i in range(int(Text_4.get())):  # Create table of widgets.
        row_label= tk.Label(wrapper2, text=i+1)
        row_label.grid(row=i+2, column=0)
        row_labels.append(row_label)

        entryvar = DoubleVar()
        depth_vars.append(entryvar)
        entry = Entry(wrapper2, text=entryvar)
        entry.grid(row=i+2, column=1)
        depth_entries.append(entry)

        entryvar = DoubleVar()
        pressure_vars.append(entryvar)
        entry = Entry(wrapper2, text=entryvar)
        entry.grid(row=i+2, column=2)
        pressure_entries.append(entry)

    btn_get = Button(wrapper2, text='Get Lists', command=get_lists)
    btn_get.grid(row=i+3, column=0)


def get_lists():
    ''' Create lists from data in Entry widget vars. '''
    global X_Depth, Y_Pressure

    X_Depth.clear()
    Y_Pressure.clear()

    for depth, pressure in zip(depth_vars, pressure_vars):
        X_Depth.append(depth.get())
        Y_Pressure.append(pressure.get())

    print('X_Depth:', X_Depth)
    print('Y_Pressure:', Y_Pressure)

b1 = Button(wrapper2, text='Generate', command=table_generation)
b1.grid(row=0, column=3)

window.mainloop()

這是在 combobox 中選擇5並單擊Generate按鈕后的屏幕截圖:

它運行的屏幕截圖

暫無
暫無

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

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