#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()
Комментарии:
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()
>>>
Выход: