Canopy 与命令行中的差异 运行 脚本
Difference running script in Canopy vs Command Line
我有一个脚本可以将一系列图像输出到笔记本,我在下面对其进行了简化:
import os
import sys
import tkinter as tk
from tkinter import ttk
path = sys.path[0]
os.chdir(path)
def on_close():
root.quit()
root.destroy()
root = tk.Tk()
root.geometry('1250x550')
n = ttk.Notebook(root)
n.grid()
imgs = [img for img in os.listdir(path) if img.endswith('.png')]
for img in imgs:
f = ttk.Frame(n)
n.add(f, text=img)
photo = tk.PhotoImage(file=img)
label = ttk.Label(f, image=photo)
label.image = photo
label.grid(row=1, column=1, padx=(300,0))
root.wm_protocol('WM_DELETE_WINDOW', on_close)
root.mainloop()
当我在 Windows 中从命令行 运行 脚本时,脚本按原样工作。如果我将代码更改为 root = tk.Toplevel()
,则会出现一个额外的 window(即隐式 tk.Tk() window),这正是我所期望的。
但是,当我从 Canopy 中 运行 上面的脚本时,我收到一条错误消息 "pyimage doesn't exist"。我可以通过将我的代码更改为 root = tk.Toplevel()
来解决此问题,并且所有内容都正常 运行,没有额外的 window。
为什么我从 Canopy 运行 时会出现差异?我读过人们在显示图像时需要更改 root = tk.Toplevel()
的问题,因为他们以某种方式在他们的脚本中创建了两个根 windows。但是,我不认为这描述了我的情况,也没有解释为什么我的脚本可以从命令行而不是 Canopy 运行。
默认情况下,Canopy 的 (IPython) 内核是在 PyLab 模式下创建的,具有默认的 Qt 后端。有关切换/禁用此功能的信息,请参阅 https://support.enthought.com/hc/en-us/articles/204469880-Using-Tkinter-Turtle-or-Pyglet-in-Canopy-s-IPython-panel
我有一个脚本可以将一系列图像输出到笔记本,我在下面对其进行了简化:
import os
import sys
import tkinter as tk
from tkinter import ttk
path = sys.path[0]
os.chdir(path)
def on_close():
root.quit()
root.destroy()
root = tk.Tk()
root.geometry('1250x550')
n = ttk.Notebook(root)
n.grid()
imgs = [img for img in os.listdir(path) if img.endswith('.png')]
for img in imgs:
f = ttk.Frame(n)
n.add(f, text=img)
photo = tk.PhotoImage(file=img)
label = ttk.Label(f, image=photo)
label.image = photo
label.grid(row=1, column=1, padx=(300,0))
root.wm_protocol('WM_DELETE_WINDOW', on_close)
root.mainloop()
当我在 Windows 中从命令行 运行 脚本时,脚本按原样工作。如果我将代码更改为 root = tk.Toplevel()
,则会出现一个额外的 window(即隐式 tk.Tk() window),这正是我所期望的。
但是,当我从 Canopy 中 运行 上面的脚本时,我收到一条错误消息 "pyimage doesn't exist"。我可以通过将我的代码更改为 root = tk.Toplevel()
来解决此问题,并且所有内容都正常 运行,没有额外的 window。
为什么我从 Canopy 运行 时会出现差异?我读过人们在显示图像时需要更改 root = tk.Toplevel()
的问题,因为他们以某种方式在他们的脚本中创建了两个根 windows。但是,我不认为这描述了我的情况,也没有解释为什么我的脚本可以从命令行而不是 Canopy 运行。
默认情况下,Canopy 的 (IPython) 内核是在 PyLab 模式下创建的,具有默认的 Qt 后端。有关切换/禁用此功能的信息,请参阅 https://support.enthought.com/hc/en-us/articles/204469880-Using-Tkinter-Turtle-or-Pyglet-in-Canopy-s-IPython-panel