2016-12-08 2 views
1

Я работаю над этой диаграммой сидения do-hickiy около 2-3 часов, и я подошел к точке, где я застрял. Когда я ввожу имя в текст, собрать вход, и присвоить его переменной, это дает мне вход, который выглядит, как этотПолучение пустого ввода от текста tkinter

[''] 

Я не был в состоянии найти что-нибудь по этой проблеме, и я хотите использовать Text(), а не Entry(), потому что Entry() не имеет атрибута высоты. Если вы можете дать мне какие-либо подсказки или советы о том, как выяснить эту проблему, или у вас есть другие советы для моего кода, пожалуйста, не стесняйтесь сказать мне, как сделать мой код лучше :)

проблема при вводе имени:

[''] 
Name Already exists 
['', ''] 
Name Already exists 
['', '', ''] 
Name Already exists 
['', '', '', ''] 

Код:

#commands: add name , Run 

#imports 
import random 
from time import sleep 
from tkinter import * 

#Console and background Handlers 
Tables = 6 
Names = []  

def AddNames(): 
    if NewNames in Names: 
     print("Name Already exists") 
    Names.append(NewNames) 
    print(Names) 

def Random(): 
    RandomNum = random.randrange(Tables) 
    if RandomNum == 0: 
     RandomNum = random.randrange(Tables) 
    return RandomNum 

def run(): 
    X = 0 
    for i in Names: 
     print(Names[X]) 
     print("Table: " + str(Random())) 
     X += 1 

#GUI Handler 
root = Tk() 
root.geometry("1024x768") 

e = Text(root, bd=10, font=("Comic Sans MS", 50), width=15, height=2) 
e.pack() 
NewNames = e.get("1.0", 'end -1c') 

AddNameButton = Button(root, text=("Add Name"), width=15, height=5, command=AddNames) 
AddNameButton.pack() 
root.mainloop() 
+0

'NewNames' инициализируется пустой строкой и никогда не изменяется. –

+0

NewNames = e.get ("1.0", 'end -1c'), это не изменено здесь? – PinkChicken

+0

Да, он установлен в пустую строку, потому что на данный момент у пользователя не было возможности вводить что-либо, потому что это примерно 1 миллисекунду после создания виджета. –

ответ

0

для записи, и в основном из комментариев (@Bryan Oakley):

AddNames метод, который, как предполагается, ч и на входе, на самом деле не проверяет содержимое виджета eText.

Линия:

NewNames = e.get("1.0", 'end -1c') 

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

Как и в исходном коде, при запуске скрипта содержимое e ставится один раз в NewNames и никогда не обновляется.


Как примечание стороны, это (по крайней мере, в Python) считается плохой практикой имен переменных и функций с крышкой. Названия функций должны быть в lower_case_with_underscores, а CamelCase должны быть зарезервированы для имен классов. Локальные имена переменных рекомендуются также в lower_case_with_underscores, но наиболее частым стилем имен является mixedCase.

Here является ссылкой, от PEP.

+0

Спасибо за помощь с переменной named :) – PinkChicken

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