Python Tkinter GUI在一行中显示numpy数组

2024-10-03 09:09:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Python与Tkinter结合使用。我希望有一个numpy数组在GUI中显示为一个带位置号的长行,但我很难弄清楚如何做到这一点。这是我这次行动的职责

     def windspeed():                     

        minSpeed2 = float(minSpeed_entry.get()) # Get value from entry box and converts to float float
        maxSpeed2 = float(maxSpeed_entry.get()) 

        if minSpeed2 >= maxSpeed2:
            tk.messagebox.showinfo("Speed error", "your minimum speed cannot be greater or equal to the max speed") # gives error if max speed is lower than min speed

        windspeed2 = wind_speed(minSpeed2,maxSpeed2)
        windspeed2 = np.round(windspeed2,3)


        shortwindspeed2 = windspeed2[0:10]

        speedbox.delete(1.0, tk.END)
        speedbox.insert(tk.END, shortwindspeed2) # this is where i think the problem is

现在看起来是这样的:

enter image description here

但是我希望它看起来像这样:

enter image description here

但是在它旁边的数组中的位置

例如:

index 0: 3.8
index 1: 3.9
index 2: 4.0
index 3: 4.1

Tags: thetogetindexifiserror数组
1条回答
网友
1楼 · 发布于 2024-10-03 09:09:09

您希望将numpy数组显示为文本并包含索引

以下代码应该可以解决您的问题:


windspeed2 = np.array([3.8, 3.9, 4.0, 4.1]) # this is just for testing. don't copy this line :)

windspeed2_head = windspeed2[:10] # take the first 10 elements
windspeed2_readable = '\n'.join([f"index {i}: {w}" for i, w in enumerate(windspeed2_head)])

print(windspeed2_readable) 
#speedbox.insert(tk.END, windspeed2_readable)

为了便于复制,我添加了一个print语句,您可以在其中放置speedbox.insert(tk.END, windspeed2_readable)

那么,我们在这里干什么?通过enumerate语句,我们可以向任何iterable添加索引。请参见此示例:

 >>> print(list(enumerate("hello")))
  [(0, 'h'), (1, 'e'), (2, 'l'), (3, 'l'), (4, 'o')]

为了得到windspeed2_readable,我们对windspeed2_head中的枚举值进行迭代。我们将当前指数指定给i,将相应的风速指定给w。现在,我们使用f字符串将这两个变量转换为字符串:f"index {i}: {w}"

最后,这一部分

 >>> [f"index {i}: {w}" for i, w in enumerate(windspeed2_head)]
 ['index 0: 3.8', 'index 1: 3.9', 'index 2: 4.0', 'index 3: 4.1']

为我们提供字符串列表。现在我们只需要用一个换行符'\n'作为分隔符来连接它们

相关问题 更多 >