首页 > 解决方案 > 如何在 Python 制作的 GUI 内的画布或文本小部件上迭代打印结果?

问题描述

我制作了一个简单的 GUI,它有两个按钮用于方形功能和退出按钮。我想在画布上打印结果,如预期结果所示。

这是我的代码

from tkinter import *
from PIL import Image,ImageTk
from tkinter import filedialog
from PIL import Image, ImageTk
import os
import cv2
import numpy as np
import time


    class application(Tk):
        def __init__(self,parent):
            Tk.__init__(self,parent)
            self.parent = parent
            self.minsize(width=300,height=500)
            self.initialize()
            
        def initialize(self):
            self.grid_columnconfigure(0,weight=1)
            self.grid_columnconfigure(1,weight=1)
            self.grid_columnconfigure(2,weight=1)
            
            #Button widgets
            ###########################################################################################
            self.button1 = Button(self,text='Square',bg= 'blue',width=15,height=2, command =Square)
            self.button1.grid(column=0,row=1,sticky='W',pady=5)
            
            self.button3 = Button(self,text='Exit',bg= 'blue',width=10,height=2,command=self.destroy)
            self.button3.grid(column=1,row=5,sticky='W',pady=5)
            
            #Text widget for inserting the result
        ############################################################################################
        
        self.canvas = Canvas(self,width=230,height=180,state=NORMAL)
        self.canvas.grid(column=0,row=4,sticky='W',padx=100,pady=10)
        #self.canvas.configure(bg='green')
        
        #Label widget
        ############################################################################################

        
        self.label3 = Label(self,text="Square",bg = 'red',width=10,height=2,anchor="center")
        self.label3.grid(column=0,row=3,sticky='W',padx=120)
def Square(self):
    for i in range(1,10):
        y = i**2
        print(i, y)
        
if __name__ == "__main__":
    app = application(None)
    #font.nametofont('TkDefaultFont').configure(size=10)
    app['bg']='red'
    app.title("square")
    app.mainloop()

我的预期结果如下图所示

在此处输入图像描述

标签: pythonuser-interfacetkintercanvastext

解决方案


不完全确定你在问什么。但是,如果您只想在画布上创建文本,请使用canvas.create_text(x, y, text).

from tkinter import *
from PIL import Image,ImageTk


class application(Tk):
    def __init__(self,parent):
        Tk.__init__(self,parent)
        self.parent = parent
        self.minsize(width=300,height=500)
        self.initialize()
        
    def initialize(self):
        self.grid_columnconfigure(0,weight=1)
        self.grid_columnconfigure(1,weight=1)
        self.grid_columnconfigure(2,weight=1)
        
        #Button widgets
        ###########################################################################################
        self.button1 = Button(self,text='Square',bg= 'blue',width=15,height=2, command=self.Square)
        self.button1.grid(column=0,row=1,sticky='W',pady=5)
        
        self.button3 = Button(self,text='Exit',bg= 'blue',width=10,height=2,command=self.destroy)
        self.button3.grid(column=1,row=5,sticky='W',pady=5)
        
        #Text widget for inserting the result
    ############################################################################################
        
        self.canvas = Canvas(self,width=230,height=180,state=NORMAL)
        self.canvas.grid(column=0,row=4,sticky='W',padx=100,pady=10)
        #self.canvas.configure(bg='green')
        
        self.label3 = Label(self,text="Square",bg = 'red',width=10,height=2,anchor="center")
        self.label3.grid(column=0,row=3,sticky='W',padx=120)
        
    def Square(self):
        for i in range(1,10):
            y = i**2
            print(i, y)
            c_id = self.canvas.create_text(0, 20, text=f"{i}\t{y}", fill="blue", font="Times 14")
            bbox = self.canvas.bbox(c_id)
            self.canvas.coords(c_id, 100, bbox[3]*i)

if __name__ == "__main__":
    app = application(None)
    #font.nametofont('TkDefaultFont').configure(size=10)
    app['bg']='red'
    app.title("square")
    app.mainloop()

推荐阅读