Единственный способ воспроизвести вашу ошибку - это создать код непосредственно в оболочке IDLE и закрыть всплывающее корневое окно перед созданием кнопки.
Тем не менее, очень странно писать GUI в командной консоли следующим образом. Если вы не закрываете окно tkinter, код работает нормально. Однако разработку GUI следует выполнять в редакторе в файле .py
и запускать сразу. Простое решение состоит в том, чтобы не закрывать корневое окно, пока все остальное в графическом интерфейсе не было добавлено.
Надлежащее решение - построить графический интерфейс в файле .py
, а затем запустить его.
Я не уверен, почему вы говорите, что редактор не работает для вас. Когда я копирую ваш точный код, он прекрасно работает с моей стороны:
Все, что говорит, что вам действительно не нужно создавать свой код в Python IDLE. Было бы намного лучше использовать что-то вроде PyCharm или Eclipse / PyDev. Это мои инструменты Go to IDE.
Стоит отметить, что в Python IDLE не будет запускать код из редактора, пока вы не сохраните файл .py
.
Хотя в Python IDLE не требуется 100%, mainloop()
является обязательным требованием для корректной работы tkinter. Вне Python IDLE большинство других сред IDE требуют mainloop()
, поэтому рекомендуется всегда включать его.
import tkinter as tk
root = tk.Tk()
b = tk.Button(root, text='button')
b.pack()
root.mainloop()
array = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
col1 = [val[1] for val in array]
col2 = [val[2] for val in array]
col3 = [val[3] for val in array]
col4 = [val[4] for val in array]
print(col1)
print(col2)
print(col3)
print(col4)
Output:
[1, 5, 9, 13]
[2, 6, 10, 14]
[3, 7, 11, 15]
[4, 8, 12, 16]
Просто использование транспонирует (), затем можно получить столбцы, столь легкие, как Вы получаете строки
matrix=np.array(originalMatrix).transpose()
print matrix[NumberOfColum]
Оператор itemgetter тоже может помочь, если вам нравится python в стиле map-reduce, а не понимание списков, для небольшого разнообразия!
# tested in 2.4
from operator import itemgetter
def column(matrix,i):
f = itemgetter(i)
return map(f,matrix)
M = [range(x,x+5) for x in range(10)]
assert column(M,1) == range(1,11)
Could it be that you're using a NumPy array? Python has the array module, but that does not support multi-dimensional arrays. Normal Python lists are single-dimensional too.
However, if you have a simple two-dimensional list like this:
A = [[1,2,3,4],
[5,6,7,8]]
then you can extract a column like this:
def column(matrix, i):
return [row[i] for row in matrix]
Extracting the second column (index 1):
>>> column(A, 1)
[2, 6]
Or alternatively, simply:
>>> [row[1] for row in A]
[2, 6]