Python Tkinter GUI отображение numpy массива в пронумерованной отдельной строке - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь использовать 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

1 Ответ

0 голосов
/ 12 апреля 2020

Вы хотите, чтобы массив 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 мы можем добавлять индексы к любой итерации. Посмотрите этот пример:

 >>> 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' в качестве разделителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...