Почему мой код вызывает sh после того, как я закрываю tKinter / appJar GUI? - PullRequest
0 голосов
/ 17 января 2020

Первый вопрос здесь.

Я новичок в Python, пытаюсь создать текстовую игру, используя appJar для пользовательского интерфейса - проблема в том, что недавно мой GUI вылетает из моего кода при выходе из него. Независимо от того, закрываю ли я окно или использую кнопку «Выход», которая останавливает GUI, я получаю эту ошибку, которая не позволяет мне запускать любой код после закрытия пользовательского интерфейса.

Ошибка:

  File "/Users/elianderson/Documents/Python/Roguelike Text Based/engine.py", line 5, in <module>
    startProgram()
  File "/Users/elianderson/Documents/Python/Roguelike Text Based/startup.py", line 34, in startProgram
    app.go()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/appJar/appjar.py", line 1833, in go
    self.topLevel.config(menu=self.menuBar)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 1637, in configure
    return self._configure('configure', cnf, kw)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 1627, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: invalid command name "."

Вот мой код:

from appJar import gui 
import classes

def startProgram():
    # Main window and settings  
    with gui() as app:
        app.setTitle("CARAVAN")
        app.setSize("1000x700")
        app.setResizable(canResize=False)
        app.setGuiPadding(20, 20)
        app.setBg("dimgray", override=True)
        app.setFg("black", override=True)
        app.setFont(size=16, family="Source Code Pro")
        def exitProgram():
            app.stop()
        with app.labelFrame("Main Window", row=0, column=0, colspan=2, rowspan=2, stretch="both", sticky="nesw"):
            app.addButton("Exit", exitProgram, row=1, column=1)
        with app.labelFrame("Status", row=0, column=2, colspan=1, rowspan=1, stretch="row", sticky="nesw"):
            app.setStretch("both")
            app.setSticky("new")
            app.addLabel("Status1", row=0, column=0, colspan=1, rowspan=1)
            app.addLabel("Status2", row=1, column=0, colspan=1, rowspan=1)
        with app.labelFrame("Inventory", row=1, column=2, colspan=1, rowspan=1, stretch="row", sticky="nesw"):
            app.setStretch("both")
            app.setSticky("new")
            app.addLabel("Inv1", row=0, column=0, colspan=1, rowspan=1)
            app.addLabel("Inv2", row=1, column=0, colspan=1, rowspan=1)
        with app.labelFrame("Time", row=2, column=2, colspan=1, rowspan=1, stretch="row", sticky="esw"):
            app.addLabel("progress", "test")
        app.setSticky("esw")
        app.setStretch("column")
        app.addLabelEntry(" ", row=2, colspan=1)
        app.setEntryDefault(" ", "Respond here...")
    app.go()

startProgram()

1 Ответ

0 голосов
/ 18 января 2020

invalid command name "." говорит вам, что окно root было уничтожено. "" это внутреннее имя окна root.

Вы не показали достаточно кода, чтобы точно определить проблему, но суть в том, что вы выполняете некоторый код tkinter после того, как окно root было разрушено .

...