Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter:如何将文本小部件嵌入画布小部件_Python_Canvas_Tkinter - Fatal编程技术网

Python 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

我想在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.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您需要首先创建一个画布窗口对象以放入其中。一点文档。在询问之前,你的第一步应该是阅读一些文档,然后搜索现有的答案。你的问题只需要一点点的研究就可以回答。这正是我想要的,还有更多!非常感谢你的帮助!