Почему мой код не возвращает значение для ввода данных в текстовое поле tkinter - PullRequest
0 голосов
/ 01 апреля 2020

Я написал этот код и по какой-то причине он отказывается возвращать какие-либо значения или входные данные для slef.REV при использовании в функции post (self), однако он возвращает значение, когда я пытаюсь вернуть значение в Функция getlen (), которая используется для повторного определения количества символов в обзоре. У меня нет этой проблемы для любых других переменных, из которых я извлекаю данные из этого класса. Ниже приведен соответствующий код, любая помощь будет оценена. Строки, в которых возникает эта проблема, - это первая функциональная запись (строки 1-5) и 4 строки снизу вверх

def post(self):
        MovieID = self.MovID
        REV = self.REV
        AddReview(conn,cursor,Add_Review,MovieID,REV)
        print(REV) 


def shrek_film(self):


    self.title = "Shrek" 
    self.MovID = 1
    self.root4 = tk.Toplevel()
    self.root4.title("Watch Shreck")
    self.root4.geometry("1400x800")
    frame_4 = tk.Frame(self.root4, bg = "black")
    frame_4.pack(fill = tk.BOTH, expand = True, padx=0 , pady=0)
    frame_4.grid_columnconfigure(1,weight=1)

    self.Create_canvas = tk.Canvas(frame_4, width=2000, height=1080)
    self.Create_canvas.place(x=-50, y=-50)
    self.Create_img = PhotoImage(file="shrek-landscape.gif")
    self.Create_canvas.create_image(20, 20, anchor = NW, image=self.Create_img)

    play_button= tk.Button(frame_4,bg="orange",text="play", command = self.addHistory)
    play_button.place(x=700,y=400)
    play_button.config(font=("Ariel","30"))


    def gtelen():
        Review = reviewbox.get('1.0',END)
        REVLEN = len(Review)
        REVLENLEFT = (231-len(Review))
        if REVLEN >=230:
            lenbox = tk.Label(frame_4 ,text="No words left",bg="orange")
            lenbox.place(x=360,y=460)
            lenbox.config(font=("Ariel","15"))
        else:
            lenbox = tk.Label(frame_4 ,text=REVLENLEFT,bg="orange")
            lenbox.place(x=360,y=460)
            lenbox.config(font=("Ariel","15"))
            print(Review)



    Words_button = tk.Button(frame_4, bg="orange",text="check number of words remaining", command=gtelen)
    Words_button.place(x=150,y=460)
    Words_button.config(font=("Ariel","10"))

    reviewlable=tk.Label(frame_4,text="Write a review",bg="orange")
    reviewlable.place(x=10,y=460)
    reviewlable.config(font=("ariel","15"))

    Review_button= tk.Button(frame_4,bg="orange",text="See Reviews")#, command = self.ViewReviews)
    Review_button.place(x=490,y=450)
    Review_button.config(font=("Ariel","15"))

    reviewbox= Text(frame_4,width=100,height=12)
    reviewbox.place(x=10,y=500)
    self.REV = reviewbox.get('1.0',END)

    post_button = tk.Button(frame_4,bg="orange",text="Post Review", command = self.post)
    post_button.place(x=830,y=650)
    post_button.config(font=("Ariel","15"))

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Строка self.REV = reviewbox.get('1.0',END) вызывается через миллисекунду после создания текстового виджета. Пользователь еще даже не видел виджет, а тем более успел его набрать.

Вы не можете вызывать метод get() до тех пор, пока пользователь не сможет ввести данные, например как внутри метода post.

def post(self):
    MovieID = self.MovID
    REV = reviewbox.get("1.0", "end")
    AddReview(conn,cursor,Add_Review,MovieID,REV)
    print(REV) 
0 голосов
/ 02 апреля 2020

Вместо этого вы можете использовать Entry и использовать StringVar

v = StringVar()                                                         # Create StringVar
reviewbox = Entry(frame_4, width = 100, height = 12, textvariable = v)  # Create Entry widget
reviewbox.place(x = 10, y = 500)                                        # Place Entry widget
self.REV = v.get()                                                      # Get contents of StringVar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...