在交互式的IPython Notebook中运行Tkinter

4

我希望创建一个交互式的Python编程游戏,用户可以在Jupyter笔记本中输入命令,并实时在GUI中看到结果。这在普通的Python交互式shell中似乎运行良好。 我让它运行的方法如下:

  1. 我创建一个文件,称为 example.py ,其中包含以下代码:
import tkinter as tk


def create_canvas():
    root = tk.Tk()
    root.resizable(False, False)
    root.title("Karel")
    frame = tk.Frame(root)
    frame.pack()
    canvas = tk.Canvas(frame, bg="white", width=500, 
        height=500)
    canvas.pack()
    return canvas


def create_oval(canvas):
    return canvas.create_oval(150, 150, 155, 155, fill='#000')



def move(canvas, oval):
    canvas.move(oval, 0, -50)
  1. 然后在交互式 Python shell 中执行以下操作:
>> import example
>> canvas = example.create_canvas()
>> oval = example.create_oval(canvas)

然而,当我在IPython中尝试使其工作时,我没有看到GUI界面(我认为这是因为我没有执行tkinter的mainloop函数)。但是,如果我执行了mainloop函数,那么用户就不能再在交互式Python shell中输入了。
所以我的问题是,如何使IPython(以便可以使用jupyter notebooks)的行为像Python一样,在不阻塞控制台用户输入的情况下显示GUI界面?
[编辑]:我已经弄清楚如何在IPython中实现它。 我必须键入ipython --gui 'tk',但是如何将IPython选项传递到jupyter笔记本服务器,以便我可以在笔记本中完成所有工作?
1个回答

6

好的,我已经想通了。

关键在于将以下行放在笔记本的开头: %gui tk。 这类似于 ipython 的 --gui 'tk 选项。


即使在%gui tk之后,IPython执行后也不会返回任何行内内容:oval = example.create_oval(canvas)。 - ph-quiett
你是在Jupyter Notebook中运行还是通过IPython在终端中运行? - Connor
我通过在命令提示符(终端)中键入jupyter笔记本来运行它。 - ph-quiett
当您尝试在普通的Python文件中运行Tkinter时,它是否有效? 如果通过ipython运行Tkinter,它是否有效? 如果我是您,我会首先测试这两种配置。 - Connor
2
感谢 OP 发布问题和答案。我正在使用基于 IPython 的 PyCharm 控制台,并在启动脚本中添加命令 %qui tk(在主面板区域的设置/构建、执行、部署/控制台/Python 控制台/启动脚本中)完美地工作。 - Iqigai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接