【tkinter学习笔记 - 4】:canvar画布、Text文本框的使用

目录

canvar画布

代码演示 

二、Text文本框的使用

代码演示 


canvar画布

canvar (画布)是一个矩形区域,可以放置图形、图像、组件等。 

代码演示 

from tkinter import *
import tkinter as tk
from PIL import Image, ImageTk
import random
class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.master = master
        self.pack()

        self.createWidget()

    def createWidget(self):
        # 创建一个画布
        self.canvas = Canvas(self, width=300, height=200, bg='yellow')
        self.canvas.pack()
        # 画一条直线
        line = self.canvas.create_line(10, 10, 30, 15, 40, 60)
        # 画一个矩形
        rect = self.canvas.create_rectangle(50, 50, 100, 100)
        # 画一个椭圆,坐标两双,为椭圆的边界矩形的左上角和底部右下角
        oval = self.canvas.create_oval(50, 50, 100, 100)

        global img
        photo = Image.open('1.gif')
        photo = photo.resize((50, 50))
        img = ImageTk.PhotoImage(photo)
        self.canvas.create_image(150, 170, image=img)

        Button(self, text='画十个矩形', command=self.draw50Recg).pack(side='left')

    def draw50Recg(self):
        for i in range(10):
            x1 = random.randrange(int(self.canvas['width'])/2)
            y1 = random.randrange(int(self.canvas['height'])/2)
            x2 = x1 + random.randrange(int(self.canvas['width'])/2)
            y2 = y1 + random.randrange(int(self.canvas['height'])/2)
            self.canvas.create_rectangle(x1, y1, x2, y2)
if __name__ == '__main__':
    root = Tk()
    root.title('Cancas画布测试')
    root.geometry('400x300+200+300')
    app = Application(root)
    root.mainloop()

  •  运行结果

  • 点击画十个矩形的按钮后 


二、Text文本框的使用

代码演示 

import tkinter as tk
from tkinter import messagebox
from tkinter import *
import webbrowser

class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self,master)
        self.master = master
        self.pack()

        self.createWidget()

    def createWidget(self):
        self.w1 = Text(self, width=40, height=12, bg='gray')
        self.w1.pack()
        # 在文本框中插入内容
        self.w1.insert(1.0, '0123456789\nabcdefg')
        self.w1.insert(2.3, '锄禾日当午,汗滴禾下土,设置盘中餐,粒粒皆辛苦\n')
        Button(self, text='重复输入文本', command=self.insertText).pack(side='left')
        Button(self, text='返回文本', command=self.returnText).pack(side='left')
        Button(self, text='添加图片', command=self.addImage).pack(side='left')
        Button(self, text='添加组件', command=self.addWidget).pack(side='left')
        Button(self, text='通过tag精确控制文本', command=self.testTag).pack(side='left')


    def insertText(self):
        # INSERT索引表示在光标处插入
        self.w1.insert(INSERT, 'QinAfeng')
        # END索引号表示在最后插入
        self.w1.insert(END, '啊哈')

    def returnText(self):
        # Indexes(索引)是用来指向Text组件中文本的位置,Text的组件索引也是对应实际字符之间的位置
        # 核心:行号以1开始,列号以0开始
        print(self.w1.get(1.2,1.6))
        self.w1.insert(2.4, 'www')
        print('所有文本内容:\n'+ self.w1.get(1.0, END))
    def addImage(self):
        self.photo = PhotoImage(file='1.gif')
        self.w1.image_create(END, image=self.photo)

    def addWidget(self):
        b1 = Button(self.w1, text='Python')
        # 在text创建组件的命令
        self.w1.window_create(INSERT, window=b1)

    def testTag(self):
        self.w1.delete(1.0, END)
        self.w1.insert(INSERT, 'Good study Day Day up!\n黄河之水\n天上来\n奔流到海\n不复回\n百度一下')
        self.w1.tag_add('Good',1.0,1.4)
        self.w1.tag_config('Good', background='yellow', foreground='red')

        self.w1.tag_add('百度', 6.0,6.2)
        self.w1.tag_config('百度', underline=True)
        self.w1.tag_bind('百度', '<Button-1>', self.webshow)

    def webshow(self,event):
        webbrowser.open('http://www.baidu.com')


if __name__ == '__main__':
    root = Tk()
    root.title('Text文本框的使用')
    app = Application(root)
    root.mainloop()

 代码中需注意的地方:

INSERT索引表示在光标处插入

Indexex索引,行以1开始,列以0开始

如:self.w1.insert(2.4, 'www'),表示从第2行,第4列开始插入

  •  运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值