2015-04-30 3 views
0

Я довольно новичок в Python, но я стараюсь учиться, когда я иду. Я использую малину Pi, и я использую Python версии 3.2.3. Мой вопрос: у меня есть текстовый виджет в моем кадре, который позволяет пользователям добавлять текст. У меня есть кнопка под названием «код запуска», и при нажатии на нее вызывается функция, которая должна проверять ввод из текстового поля. Если символ в алфавитном порядке, он печатает на ярлыке приветственное сообщение, и мой балл должен увеличиться на 5 пунктов, если вход не в алфавитном порядке, появляется сообщение об ошибке. Я попытался использовать оператор if, но работает только секция else. Какие-либо предложения? Мой код ниже:Python tkinter- получение пользовательского ввода и проверка его

import tkinter as tk 
    from tkinter import ttk 





    score = 0 


     class Game(tk.Tk): 

     def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     tk.Tk.wm_title(self, "Game") 

     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand = True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 


     menubar = tk.Menu(container) 
      filemenu = tk.Menu(menubar, tearoff=0) 
     filemenu.add_command(label="Exit", command=quit) 

     menubar.add_cascade(label="File", menu=filemenu) 

     tk.Tk.config(self, menu=menubar) 

     self.frames = {} 

     for F in (StartPage, Py2Page1): 

      frame = F(container, self) 
      self.frames[F] = frame 

      frame.grid(row=0, column = 0, sticky = "nsew") 

      self.show_frame(StartPage) 
    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 


    class StartPage(tk.Frame): 

     def __init__(self, parent, controller): 
     tk.Frame.__init__(self,parent) 

     self.columnconfigure(0,weight=1) 
     self.columnconfigure(1,weight=1) 

     label = tk.Label(self, text="Title") 
     label.grid(row=0,column=0, columnspan=2) 

      label1 = tk.Label(self, text ="Add text here") 
     label1.grid(row=1,column=0, columnspan=2, pady=10) 


      button1 = ttk.Button(self, text="Start", command=lambda:   controller.show_frame(Py2Page1)) 
      button1.grid(row=2,column=0, columnspan=2,pady=10) 





    class Py2Page1(tk.Frame): 
    def __init__(self, parent,controller): 
     tk.Frame.__init__(self, parent) 

     result = tk.StringVar() 

     self.columnconfigure(0,weight=1,minsize=640) 
      self.columnconfigure(1,weight=1,minsize=640) 

     label = tk.Label(self, text="Title!") 
     label.grid(row=0,column=0,columnspan=2) 

     self.status = tk.Label(self) 
     self.status.grid(row=0,column=1,sticky="e",padx=30) 


     label2 = tk.Label(self, text ="""SubTitle""") 
      label2.grid(row=1,column=0) 

     label3 = tk.Label(self, text =""" 
     Add text here.... 
     """, justify="left") 
     label3.grid(row=2,column=0,sticky="n") 



     self.user_input = tk.Text(self,wrap="word") 
      self.user_input.grid(column=1,row=2) 

      button4 = ttk.Button(self,text="Run Code", command = self.checking) 
      button4.grid(column=1,row=3) 

      button5 = ttk.Button(self,text="Clean", command = self.clear) 
      button5.grid(column=1,row=4) 

      self.output = tk.Label(self) 
      self.output.grid(column=1,row=5,sticky='w', pady=10,padx=10) 

     def checking(self): 
      answer = self.user_input.get('1.0',tk.END) 

      if answer.isalpha(): 
      result = "Hello " + answer 
      scorechanged= score =+ 5 
      else: 
       result = "Please enter your name again" 


      self.output.config(text=result) 
      self.status.config(text=scorechanged) 


     def clear(self): 
      self.user_input.delete('1.0',tk.END) 










    app = Game() 
    app.geometry("1280x720") 
    app.mainloop() 

Благодаря

+0

В блоке 'else' в' check() 'добавьте' print (answer) ', чтобы вы могли видеть, что он оценивает и выясняет, почему он терпит неудачу. Кроме того, исправьте 'scorechanged = score = + 5'. – TigerhawkT3

+0

ваш отступ выглядит полностью привинченным. Является ли ваш фактический код таким? Если нет, пожалуйста, отформатируйте вопрос, чтобы код работал. –

ответ

0

Обращаясь к исходному вопросу:

userInput = stringVar() 
userEntry = Entry(master, variable=userInput) #creates an entry box 
userInput.get() # returns what is in the entry box 

я мог себе представить, с помощью этого кода вы можете выполнить то, что вы собираетесь. Вы можете использовать операторы if, чтобы увидеть, что находится в поле ввода, и определить погоду - это число.

try: 
    int(userInput.get()) # try and convert to integer 
except ValueError: # if the conversion fails due to it containing letters 
    print('userInput is not a number') 
+0

Он должен использоваться с текстовым виджемом, а не с виджетами. Кроме того, содержимое будет буквенно-цифровым, поэтому я должен проверить оба оператора if. Мое решение состояло в том, чтобы проверить, является ли длина строки определенной длиной, а затем печатать приветственное сообщение, если нет, тогда показывается другое сообщение, но как я могу это сделать? –

+0

Также я не могу отформатировать код, потому что я использую только планшет –

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