tkinter отображает частично вывод. Часть содержимого не видна

#python-3.x #tkinter

Вопрос:

У меня проблема с консолью Windows Power Shell, консолью Anaconda — в каждой из них какая-то часть кода не отображается при создании окна. Я не знаю, в чем причина. Моя система-win 10, Python 3, Anaconda 1.9.7. Коды взяты из нескольких учебных пособий. Когда код немного сложнее, он не будет работать. Пример ниже.

код:

 from tkinter import *
  
root = Tk()  
root.geometry("400x300") 
v2 = DoubleVar()
  
def show2():
      
    sel = "Vertical Scale Value = "   str(v2.get()) 
    l2.config(text = sel, font =("Courier", 14))
  
s2 = Scale( root, variable = v2,
           from_ = 50, to = 1,
           orient = VERTICAL) 
  
l4 = Label(root, text = "Vertical Scaler")
  
b2 = Button(root, text ="Display Vertical",
            command = show2,
            bg = "purple", 
            fg = "white")
  
l2 = Label(root)
  
s2.pack(anchor = CENTER) 
l4.pack()
b2.pack()
l2.pack()
  
root.mainloop()
 

ожидаемый и желаемый результат

Когда я вставил этот код в каждую консоль, результат был таким:

консольный вывод(Анаконда):

 PS C:Usersb2b> python
Python 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from tkinter import *
>>>
>>> root = Tk()
>>> root.geometry("400x300")
''
>>> v2 = DoubleVar()
>>>
>>> def show2():
...
...     sel = "Vertical Scale Value = "   str(v2.get())
...     l2.config(text = sel, font =("Courier", 14))
...
... s2 = Scale( root, variable = v2,
  File "<stdin>", line 6
    s2 = Scale( root, variable = v2,
     ^
SyntaxError: invalid syntax
>>>            from_ = 50, to = 1,
  File "<stdin>", line 1
    from_ = 50, to = 1,
    ^
IndentationError: unexpected indent
>>>            orient = VERTICAL)
  File "<stdin>", line 1
    orient = VERTICAL)
    ^
IndentationError: unexpected indent
>>>
>>> l4 = Label(root, text = "Vertical Scaler")
>>>
>>> b2 = Button(root, text ="Display Vertical",
...             command = show2,
...             bg = "purple",
...             fg = "white")
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'show2' is not defined
>>>
>>> l2 = Label(root)
>>>
>>> s2.pack(anchor = CENTER)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 's2' is not defined
>>> l4.pack()
>>> b2.pack()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b2' is not defined
>>> l2.pack()
>>>
>>> root.mainloop()
 

Окно, созданное консолью Anaconda

Выход оболочки питания Windows (открывается с помощью предварительного просмотра терминала Windows) :

 PS C:Usersb2b> python
Python 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from tkinter import *
>>>
>>> root = Tk()
>>> root.geometry("400x300")
''
>>> v2 = DoubleVar()
>>>
>>> def show2():
...
...     sel = "Vertical Scale Value = "   str(v2.get())
...     l2.config(text = sel, font =("Courier", 14))
...
... s2 = Scale( root, variable = v2,
  File "<stdin>", line 6
    s2 = Scale( root, variable = v2,
     ^
SyntaxError: invalid syntax
>>>            from_ = 50, to = 1,
  File "<stdin>", line 1
    from_ = 50, to = 1,
    ^
IndentationError: unexpected indent
>>>            orient = VERTICAL)
  File "<stdin>", line 1
    orient = VERTICAL)
    ^
IndentationError: unexpected indent
>>>
>>> l4 = Label(root, text = "Vertical Scaler")
>>>
>>> b2 = Button(root, text ="Display Vertical",
...             command = show2,
...             bg = "purple",
...             fg = "white")
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'show2' is not defined
>>>
>>> l2 = Label(root)
>>>
>>> s2.pack(anchor = CENTER)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 's2' is not defined
>>> l4.pack()
>>> b2.pack()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b2' is not defined
>>> l2.pack()
>>>
>>> root.mainloop()
 

окно, созданное оболочкой питания Windows

Комментарии:

1. Почему вы создаете окно в интерактивной среде

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

3. Кроме того, из-за недопустимого синтаксиса видна только метка

4. Вам нужно () закрыть на той же строке, в отличие от холостого хода, где вы можете использовать ( и закрыть ее в следующей строке

Ответ №1:

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

 
>>> def foo:
    
SyntaxError: invalid syntax
>>> foo()
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    foo()
NameError: name 'foo' is not defined
>>> def foo():
        print("OK")

    
>>> foo()
OK
>>> 

 

Также работает для tkinter:

 
>>> from tkinter import *
>>> root = Tk()
>>> root.geometry("400x300zzz")
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    root.geometry("400x300zzz")
  File "...tkinter__init__.py", line 1835, in wm_geometry
    return self.tk.call('wm', 'geometry', self._w, newGeometry)
_tkinter.TclError: bad geometry specifier "400x300zzz"
>>> root.geometry("400x300")
''
>>> label = Label(text="Text")
>>> label.pack()
>>> 

 

l4 Этикетка упакована без ошибок, так что вы можете ее видеть.
l2 Метка также помещена в корневое окно, но в ней нет текста.

Ответ №2:

Я бы рекомендовал запустить его как скрипт, а не как терминал.

если вы все еще хотите выполнить построчно и увидеть результат, пожалуйста, следуйте приведенному ниже методу. Я свел функции в одну строку, добавив»;», чтобы избежать синтаксических ошибок и ошибок отступа, и это работает отлично.

Моя консоль выглядит так,

 >>> from tkinter import *
>>> root = Tk()
>>> root.geometry("300x300")
''
>>> v2 = DoubleVar()
>>> s2 = Scale( root, variable = v2, from_ = 50, to = 1, orient = VERTICAL)
>>> l4 = Label(root, text = "Vertical Scaler")
>>> s2.pack(anchor = CENTER);l4.pack()
>>> l2 = Label(root)
>>> l2.pack()
>>> def show2():sel = "Vertical Scale Value = "   str(v2.get());l2.config(text = sel, font =("Courier", 14));

>>> b2 = Button(root, text ="Display Vertical", command = show2, bg = "purple", fg = "white")
>>> b2.pack()
>>> 
 

Выход:

Выходной Снип