繁体   English   中英

tkinter canvas文本输出

[英]tkinter canvas text output

我一直在看我的代码一段时间,这是tkinter的新知识。 我的代码的目的是在“ Canvas小部件中显示文本,而不覆盖标签。 但不确定如何执行此操作:

我的代码如下:

from tkinter import *

class Example(Frame):

    def printLabel(self):
        self.hello = []
        self.hello.append('Hello')
        self.hello.append('World!')
        return(self.hello)

    def updatePanel(self):
        self.panelA.config(text="{}".format(self.printLabel()))

    def __init__(self, root):
        Frame.__init__(self, root)
        self.buttonA()
        self.viewingPanel()

    def buttonA(self):
        self.firstPage = Button(self, text="Print Text", bd=1, anchor=CENTER, height = 11, width = 13, command=lambda: self.updatePanel())
        self.firstPage.place(x=0, y=0)

    def viewingPanel(self):
        self.panelA = Label(self, bg='white', width=65, height=13, padx=3, pady=3, anchor=NW, text="")
        self.panelA.place(x=100, y=0)
        self.cl= Canvas(self.panelA,bg='WHITE',width=165,height=113,relief=SUNKEN)
        canvas_id = self.cl.create_text(15, 15, anchor="nw")

        self.xb= Scrollbar(self.panelA,orient="horizontal", command=self.cl.xview)
        self.xb.pack(side=BOTTOM,fill=X)
        self.xb.config(command=self.cl.xview)
        self.yb= Scrollbar(self.panelA,orient="vertical", command=self.cl.yview)
        self.yb.pack(side=RIGHT,fill=Y)
        self.yb.config(command=self.cl.yview)

        self.cl.itemconfig(canvas_id,font=('Consolas',9), text="{}".format(self.printLabel()))
        self.cl.configure(scrollregion = self.cl.bbox("all"))
        self.cl.config(xscrollcommand=self.xb.set, yscrollcommand=self.yb.set)
        self.cl.config(width=250,height=150)
        self.cl.pack(side=LEFT,expand=True,fill=BOTH)

def main():
    root = Tk()
    root.title("Tk")
    root.geometry('378x176')
    app = Example(root)
    app.pack(expand=True, fill=BOTH)
    root.mainloop()

if __name__ == '__main__':
    main()

Hello World! 应该在Canvas没有括号的情况下显示,但主要问题是当我单击Button它与画布重叠并打印出Label的追加。

Label应位于“ Canvas内部。

这是解决“主要问题”和“括号问题”的方法。 后者是通过使用注释中建议的字符串join()方法来解决的。

updatePanel()方法已被修改,因此它首先创建一个Label窗口小部件,并在其中显示您要显示的文本,然后是一个Canvas “窗口”对象,将该窗口小部件指定为其内容。 您尝试执行此操作的方法的代码也已从其他类方法中删除。

from tkinter import *


class Example(Frame):

    def __init__(self, root):
        Frame.__init__(self, root)
        self.buttonA()
        self.viewingPanel()

    def printLabel(self):
        text = []
        text.append('Hello')
        text.append('World!')
        return ' '.join(text)

    def updatePanel(self):
        label = Label(self, bg='white', padx=3, pady=3, anchor=NW,
                      text=self.printLabel())
        label.place(relx=0.5, rely=0.5, anchor=CENTER)
        self.cl.create_window(100, 100, window=label)  # Put Label in a Canvas "window".

    def buttonA(self):
        self.firstPage = Button(self, text="Print Text", bd=1, anchor=CENTER, height=11,
                                width=13, command=lambda: self.updatePanel())
        self.firstPage.place(x=0, y=0)

    def viewingPanel(self):
        self.panelA = Label(self, bg='white', width=65, height=13, padx=3, pady=3,
                            anchor=NW, text="")
        self.panelA.place(x=100, y=0)
        self.cl= Canvas(self.panelA, bg='WHITE', width=165, height=113, relief=SUNKEN)
        canvas_id = self.cl.create_text(15, 15, anchor="nw")

        self.xb= Scrollbar(self.panelA,orient="horizontal", command=self.cl.xview)
        self.xb.pack(side=BOTTOM, fill=X)
        self.xb.config(command=self.cl.xview)
        self.yb= Scrollbar(self.panelA, orient="vertical", command=self.cl.yview)
        self.yb.pack(side=RIGHT, fill=Y)
        self.yb.config(command=self.cl.yview)

        self.cl.itemconfig(canvas_id, font=('Consolas',9), text=self.printLabel())
        self.cl.configure(scrollregion=self.cl.bbox("all"))
        self.cl.config(xscrollcommand=self.xb.set, yscrollcommand=self.yb.set)
        self.cl.config(width=250, height=150)
        self.cl.pack(side=LEFT, expand=True, fill=BOTH)


def main():
    root = Tk()
    root.title("Tk")
    root.geometry('378x176')
    app = Example(root)
    app.pack(expand=True, fill=BOTH)
    root.mainloop()

if __name__ == '__main__':
    main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM