Python 模块冲突(tkinter 和 pylab)导致 Pycharm Python 控制台出现奇怪的不一致
Python modules clashing (tkinter & pylab) leading to weird inconsistency in Pycharm Python console
我已经简化了我的问题。
我有两个文件:
test.py 和 ratios.py
ratios.py 只是一行:
import pylab as pl
test.py 是:
import tkinter as tk
import tkinter.font as font
import os
from ratios import *
def mainAlgo(username, cursor, code_groupe, tkWindow):
root = tk.Tk()
root.title("Title")
root.resizable(False, False)
myFont = font.Font(size=15)
canvas = tk.Canvas(root, height=600, width=800)
canvas.pack()
background_image = tk.PhotoImage(file="dev/bg.png")
background_label = tk.Label(root, image=background_image)
background_label.place(relwidth=1, relheight=1)
root.mainloop()
mainAlgo("", "", "", "")
如果我启动 test.py,一切正常。
如果我通过删除最后一行来修改 test.py,然后在控制台 like so 中输入 mainAlgo("", "", "", "") 我会出现以下错误:
Backend TkAgg is interactive backend. Turning interactive mode on.
mainAlgo("", "", "", "")
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:/Users/lh/Documents/Documents/Formation scolaire/Thèse/Travail/Algo/Version_Finale_Indep 12.00/test.py", line 18, in mainAlgo
background_label = tk.Label(root, image=background_image)
File "C:\Users\lh\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 3148, in __init__
Widget.__init__(self, master, 'label', cnf, kw)
File "C:\Users\lh\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 2572, in __init__
self.tk.call(
_tkinter.TclError: image "pyimage1" doesn't exist
我正在使用 Windows 10、Python 3.9 和 PyCharm。
是不是很奇怪?两者应该是等价的(至少是这样教给我的)!
我将不胜感激 help/advice。
[编辑] 我提到 python 模块冲突,因为如果我不导入 pylab,我就不会出现这种不一致。但是,我找不到修复程序(我需要导入一个使用 pylab 的模块!!)。
将 master = root
添加到 tk.PhotoImage 解决了问题。更改 python 编辑器(VS Code 和 Pyzo)也解决了它(不添加 master = root
)
我真的不知道为什么,欢迎任何解释。
我已经简化了我的问题。 我有两个文件: test.py 和 ratios.py
ratios.py 只是一行:
import pylab as pl
test.py 是:
import tkinter as tk
import tkinter.font as font
import os
from ratios import *
def mainAlgo(username, cursor, code_groupe, tkWindow):
root = tk.Tk()
root.title("Title")
root.resizable(False, False)
myFont = font.Font(size=15)
canvas = tk.Canvas(root, height=600, width=800)
canvas.pack()
background_image = tk.PhotoImage(file="dev/bg.png")
background_label = tk.Label(root, image=background_image)
background_label.place(relwidth=1, relheight=1)
root.mainloop()
mainAlgo("", "", "", "")
如果我启动 test.py,一切正常。 如果我通过删除最后一行来修改 test.py,然后在控制台 like so 中输入 mainAlgo("", "", "", "") 我会出现以下错误:
Backend TkAgg is interactive backend. Turning interactive mode on.
mainAlgo("", "", "", "")
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:/Users/lh/Documents/Documents/Formation scolaire/Thèse/Travail/Algo/Version_Finale_Indep 12.00/test.py", line 18, in mainAlgo
background_label = tk.Label(root, image=background_image)
File "C:\Users\lh\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 3148, in __init__
Widget.__init__(self, master, 'label', cnf, kw)
File "C:\Users\lh\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 2572, in __init__
self.tk.call(
_tkinter.TclError: image "pyimage1" doesn't exist
我正在使用 Windows 10、Python 3.9 和 PyCharm。
是不是很奇怪?两者应该是等价的(至少是这样教给我的)!
我将不胜感激 help/advice。
[编辑] 我提到 python 模块冲突,因为如果我不导入 pylab,我就不会出现这种不一致。但是,我找不到修复程序(我需要导入一个使用 pylab 的模块!!)。
将 master = root
添加到 tk.PhotoImage 解决了问题。更改 python 编辑器(VS Code 和 Pyzo)也解决了它(不添加 master = root
)
我真的不知道为什么,欢迎任何解释。