Python Tkinter:如何将文本小部件嵌入画布小部件
我想在tkinter中制作一个文本编辑器。首先,我创建了一个画布。然后,我想在画布中嵌入一个文本小部件,就像在图像中一样 我的代码如下:Python Tkinter:如何将文本小部件嵌入画布小部件,python,canvas,tkinter,Python,Canvas,Tkinter,我想在tkinter中制作一个文本编辑器。首先,我创建了一个画布。然后,我想在画布中嵌入一个文本小部件,就像在图像中一样 我的代码如下: def run(): root = tk.Tk() global data class Struct(object): pass data = Struct() initData() global text text = Text(root,width=400,height=500) data.r
def run():
root = tk.Tk()
global data
class Struct(object): pass
data = Struct()
initData()
global text
text = Text(root,width=400,height=500)
data.root = root
canvas = Canvas(root,width=1200,height=600)
canvas.pack()
text.pack()
drawBackground(canvas)
root.mainloop()
run()
如何为text而不是text.pack编写pack语句
谢谢大家! 您必须使用canvas.create\u窗口而不是text.pack。
文本应该使用画布作为父对象:Textcanvas
顺便说一句:文本的宽度和高度是以字符为单位的,而不是以像素为单位的。
对于不同的字体,文本将使用不同的像素大小
import tkinter as tk
# --- classes ---
class Struct(object):
pass
# --- functions ---
def run():
# all `global` always at the top of function
# to make it more readable
global data
global text
data = Struct()
#initData(data)
root = tk.Tk()
data.root = root
canvas = tk.Canvas(root, width=1200, height=600)
canvas.pack()
#drawBackground(canvas)
# Text needs `canvas` as parent.
# `width` and `height` is in `chars`, not in `pixels`.
# `Text` will use different size in pixels for different font.
text = tk.Text(canvas, width=120, height=40)
canvas.create_window((0, 0), window=text, anchor='nw')
text.insert('end', 'Hello World')
root.mainloop()
# --- main ---
run()
顺便说一句:如果你想在背景图像,那么你可以使用图像标签
然后,您可以使用标签作为父项将文本放入标签中
import tkinter as tk
from PIL import ImageTk
# --- functions ---
def run():
# all `global` always at the top of function
# to make it more readable
global text
root = tk.Tk()
image = ImageTk.PhotoImage(file='image.jpg')
label = tk.Label(root, image=image)
label.pack(fill='both', expand=True)
label.image = image # keep reference - see Note on effbot.org
# Text needs `label` as parent
# `padx`, `pady` create external margin so you can see background
text = tk.Text(label)
text.pack(fill='both', expand=True, padx=100, pady=100)
text.insert('end', 'Hello World')
root.mainloop()
# --- main ---
run()
顺便说一句:请参阅关于垃圾收集和保存的注释参考:
您必须使用canvas.create\u windowtext而不是text.pack。查找如何创建滚动框架的信息。为什么使用画布?您可以将文本直接放在根目录下,它将与滚动条一起工作——其他小部件(如Frame)需要画布来与滚动条一起工作。effbot.org:BTW:如果您希望在画布上显示文本,那么文本应该使用画布作为父级-textCanvas您需要首先创建一个画布窗口对象以放入其中。一点文档。在询问之前,你的第一步应该是阅读一些文档,然后搜索现有的答案。你的问题只需要一点点的研究就可以回答。这正是我想要的,还有更多!非常感谢你的帮助!