2014-09-09 4 views
-1

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

import tkinter 
def a(): 
    c1 = 1 
    c2 = 2 
    root = tkinter.Tk() 
    canvas = tkinter.Canvas(root, width=800, height=600) 

    def b(): 
     if c1 != c2: 
      print ("test") 
      canvas.create_rectangle(100, 100, 500, 500, fill='blue') 
      root.after(10, b) 
    root.after(10, b) 
a() 

Как вы можете видеть, в функции b, если переменная c1 не равна c2 (или наоборот), то он должен print«тест». Однако это не печать, и даже не выполняется код прямоугольника ничьей.

Однако, когда я размещаю еще один манекен print, перед заявлением if он распечатает это.

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

+0

Вы должны добавить 'root.mainloop()' до конца вашего '' а) метод (в противном случае он никогда не будет использовать приложение. Вы также забыли '.pack()' ваш виджет холста. – 2014-09-09 18:07:12

+0

_ «Когда я помещаю другой оператор« print »перед оператором' if', он будет печатать это. »_ Вы уверены? Если я поставлю оператор печати между 'def b():' и 'if c1! = C2:', я вообще не вижу никакого вывода. Программа просто прекращается немедленно. – Kevin

ответ

4

Возможно, у вас не должно быть вашего корневого объекта Tk внутри функции. Я не совсем уверен, как tkinter структурирован, но перемещение root вне функции, вероятно, хорошая идея - Кроме того, необходимо ввести tkinter основной цикл перед любой из ваших after вызовов будет выполняться:

import tkinter 
root = tkinter.Tk() 

def a(): 
    c1 = 1 
    c2 = 2 

    canvas = tkinter.Canvas(root, width=800, height=600) 
    canvas.pack() 

    def b(): 
     if c1 != c2: 
      print ("test") 
      canvas.create_rectangle(100, 100, 500, 500, fill='blue') 
      root.after(10, b) 
    root.after(10, b) 
a() 
root.mainloop() 
+0

Извините. Как сказал Крис Джонсон, я должен был использовать B вместо «проверки». – monkey334

+0

Привет. Он печатает фиктивный оператор, однако прямоугольник не рисует? – monkey334

+1

@ monkey334 - Смотрите мое обновление. Вы никогда не делали виджет видимым (используя один из менеджеров геометрии tkinter - например, '.grid' или' .pack'). – mgilson

1

Кажется, вы не выполняете функцию b. Вы определяете его, но не запускаете его.

Показать код, на котором работает фиктивная печать - это внутри определения b? Я сомневаюсь в этом.

+0

Да, да. Извините – monkey334

0

Вы определяете функцию b() внутри функции a(), но вы ее не называете, какой вы хотите видеть?

EDIT:

Да, я видел вашу правку и функция работает, пробная печать.

+0

Пожалуйста, см. Мое новое изменение в коде в отношении комментария Криса Джонсона. – monkey334

1

функция удалить б

import tkinter 
def a(): 
    c1 = 1 
    c2 = 2 
    root = tkinter.Tk() 
    canvas = tkinter.Canvas(root, width=800, height=600) 

    if c1 != c2: 
     print ("test") 
     canvas.create_rectangle(100, 100, 500, 500, fill='blue') 
     root.after(10, check) 
    root.after(10, check) 
a() 
+0

, но если он удалит 'b', его вызовы' root.after (10, b) 'больше не будут работать. – Kevin

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