2016-03-11 2 views
-3

Когда я пытаюсь изменить код моего учителя, чтобы создать новое диалоговое окно, оболочка всегда показывает, что NameDialog object has no attribute _column_enter.Вопросы об объекте не имеют атрибута (Python)

Однако код моего учителя может работать таким образом, я задаюсь вопросом, в чем разница, чтобы сделать мой код не может работать:

import tkinter 

Font=('Helvetica', 14) 


class User_design: 
    def __init__(self): 
     self._root_window=tkinter.Tk() 
     start_button=tkinter.Button(
      master=self._root_window, text='click there to start.', 
      font=Font, command=self._get_start) 
     start_button.grid(
      row = 0, column = 0, padx = 10, pady = 10, 
      sticky = tkinter.S) 



     self._greeting_text = tkinter.StringVar() 
     self._greeting_text.set('Not begin') 

     greeting_label = tkinter.Label(
      master = self._root_window, textvariable = self._greeting_text, 
      font = Font) 

     greeting_label.grid(
      row = 1, column = 0, padx = 10, pady = 10, 
      sticky = tkinter.N) 

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





    def start(self) -> None: 
     self._root_window.mainloop() 

    def _get_start(self): 
     dialog = NameDialog() 
     dialog.show() 

     if dialog.was_ok_clicked(): 
      column=dialog.get_column() 
      row=dialog.get_row() 
      turn=dialog.get_turn() 
      top_left=dialog.get_top_left() 
      win_method=dialog.get_win_method() 


class NameDialog: 
    def __init__(self): 
     self._dialog_window = tkinter.Toplevel() 

     #column_label 
     column_label=tkinter.Label(
      master=self._dialog_window, text='How many columns?', 
      font=Font) 
     column_label.grid(
      row=0, column=0, padx=10,pady=10, sticky=tkinter.W) 
     self._column_entry = tkinter.Entry(
      master = self._dialog_window, width = 20, font = Font) 
     self._column_enter.grid(
      row=0, column=1, padx=10,pady=10, sticky=tkinter.W) 



     #row_input 
     row_input=tkinter.Label(
      master=self._dialog_window, text='How many rows?', 
      font=Font) 
     row_input.grid(
      row=1, column=0, padx=10,pady=10, sticky=tkinter.W) 
     self._row_entry = tkinter.Entry(
      master = self._dialog_window, width = 20, font = Font) 
     self._row_enter.grid(
      row=1, column=1, padx=10,pady=10, sticky=tkinter.W) 

     #turn_input 
     turn_input=tkinter.Label(
      master=self._dialog_window, text='Which color move first?', 
      font=Font) 
     turn_input.grid(
      row=2, column=0, padx=10,pady=10, sticky=tkinter.W) 
     self._turn_entry = tkinter.Entry(
      master = self._dialog_window, width = 20, font = Font) 
     self._turn_enter.grid(
      row=2, column=1, padx=10,pady=10, sticky=tkinter.W) 

     #top_left_input 
     top_left_input=tkinter.Label(
      master=self._dialog_window, text='Which color on top left?', 
      font=Font) 
     top_left_input.grid(
      row=3, column=0, padx=10,pady=10, sticky=tkinter.W) 
     self._top_left_entry = tkinter.Entry(
      master = self._dialog_window, width = 20, font = Font) 
     self._top_left_enter.grid(
      row=3, column=1, padx=10,pady=10, sticky=tkinter.W) 

     #win_menthod_input 
     win_method_input=tkinter.Label(
      master=self._dialog_window, text='win method?', 
      font=Font) 
     win_method_input.grid(
      row=4, column=0, padx=10,pady=10, sticky=tkinter.W) 
     self._win_method_entry = tkinter.Entry(
      master = self._dialog_window, width = 20, font = Font) 
     self._win_method_enter.grid(
      row=4, column=1, padx=10,pady=10, sticky=tkinter.W) 



     button_frame = tkinter.Frame(master = self._dialog_window) 
     button_frame.grid(
      row = 5, column = 0, columnspan = 2, padx = 10, pady = 10, 
      sticky = tkinter.E + tkinter.S) 
     ok_button = tkinter.Button(
      master = button_frame, text = 'OK', font = Font, 
      command = self._on_ok_button) 
     ok_button.grid(row = 0, column = 0, padx = 10, pady = 10) 
     cancel_button = tkinter.Button(
      master = button_frame, text = 'Cancel', font = Font, 
      command = self._on_cancel_button) 
     cancel_button.grid(row = 0, column = 1, padx = 10, pady = 10) 


     self._dialog_window.rowconfigure(5, weight = 1) 
     self._dialog_window.columnconfigure(1, weight = 1) 


     self._ok_clicked = False 
     self._column = '' 
     self._row = '' 
     self._turn='' 
     self._top_left='' 
     self._win_method='' 


    def show(self): 
     self._dialog_window.grab_set() 
     self._dialog_window.wait_window() 

    def was_ok_clicked(self) -> bool: 
     return self._ok_clicked 


    def get_column(self) -> str: 
     return self._column 


    def get_row(self) -> str: 
     return self._row 

    def get_turn(self)->str: 
     return self._turn 

    def get_top_left(self)->str: 
     return self._top_left 

    def get_win_method(self)->str: 
     return self._win_method 

    def _on_ok_button(self) -> None: 
     self._ok_clicked = True 
     self._column = self._column_entry.get() 
     self._row = self._row_entry.get() 
     self._turn = self._turn_entry.get() 
     self._top_left = self._top_left_entry.get() 
     self._win_menthod = self._win_method_entry.get() 

     self._dialog_window.destroy() 


    def _on_cancel_button(self) -> None: 
     self._dialog_window.destroy() 





if __name__ == '__main__': 
    User_design().start() 
+0

Ctrl-f-ing для «_column_enter» дает только один удар в вашем коде. Проверьте наличие опечаток. – user2357112

ответ

0
self._column_entry = tkinter.Entry(
      master = self._dialog_window, width = 20, font = Font) 
self._column_enter.grid(
      row=0, column=1, padx=10,pady=10, sticky=tkinter.W) 

, потому что ваше заклинание неправильно.

0

Общее описание раздела: Текстовое описание доступное на продажу Вконтакте Зарабатывайте на Директе enter От entry, так что переменная, которую вы пытаетесь установить, не существует.

Поиск и замена enter с entry, и вы должны быть хорошими.

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