2013-08-17 3 views
1

У меня есть небольшое приложение, которое принимает строку чисел, запускает их через функцию и выплескивает вывод. Для записи списка У меня есть следующие настройки:Изменение синтаксиса для записей в Python (Tkinter)

def create_widgets(self): 
     self.entryLabel = Label(self, text="Please enter a list of numbers:") 
     self.entryLabel.grid(row=0, column=0, columnspan=2)  

     self.listEntry = Entry(self) 
     self.listEntry.grid(row=0, column=2, sticky=E) 

Однако, это позволяет мне только для ввода строк (например, 123451011) в то время как я хотел бы, чтобы быть в состоянии распознавать отдельные номера (например, 1,2,3 , 4,5,10,11). Полагаю, в основном то, что я прошу, - это использовать список вместо строки. Есть ли способ изменить self.listEntry, чтобы справиться с этим? Есть ли что-то, что я могу добавить в свою функцию вместо этого (который в настоящее время вводит valueList = list (self.listEntry.get()))? Благодаря!

EDIT:

Я определил функцию следующим образом:

def Function(self): 
     valueList = list([int(x) for x in self.listEntry.get().split(",")]) 
     x = map(int, valueList) 

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

ответ

2

Вы можете сделать что-то вроде этого:

import Tkinter as tk 

root = tk.Tk() 

entry = tk.Entry() 
entry.grid() 

# Make a function to go and grab the text from the entry and split it by commas 
def get(): 
    '''Go and get the text from the entry''' 

    print entry.get().split(",") 

# Hook the function up to a button 
tk.Button(text="Get numbers", command=get).grid() 

root.mainloop() 

Или, если вы хотите, чтобы они все целые числа, измените эту строку:

print entry.get().split(",") 

к этому:

print map(int, entry.get().split(",")) 
+0

Я не совсем уверен, что я следую. Идея создать отдельную кнопку для получения чисел в правильном формате? Спасибо за вашу помощь! – 114

+0

@Stopwatch - Да. Сделайте кнопку, которая подключена к функции. Функция должна захватить текст из записи, а затем разбить ее запятыми. Результатом, возвращаемым этой функцией, будет список, содержащий то, что вы хотите. – iCodez

+0

Спасибо iCodez, как ваши, так и ответы Брайана были очень полезны. – 114

0

Вы можете просто использовать split на входе, а затем отобразите int в список, который генерирует.

self.listEntry = [int(x) for x in Entry(self).split(',')] 
+0

Это не сработает, потому что 'Entry' не имеет метода' split'. – iCodez

+0

@ user1612868 Спасибо. Так должна ли отредактированная версия выглядеть примерно так? Edit: Nevermind, основанный на том, что только что сказал iCodez! – 114

+2

Ваше описание верное, но код неправильный. Чтобы получить значения как список целых чисел, вы должны сделать '[int (x) для x в self.listEntry.get(). Split (", ")]'. Что делает ваш код, это создать новый виджет ввода, а затем разбить имя виджета записи (это то, что представляет собой строковое представление объекта виджета элемента). –

Смежные вопросы