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

简介: 【tkinter学习笔记 - 4】: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()

5302809b5cf342879a1f78febaaee3aa.png

运行结果

369458dc841344549c1b12294213cc61.png

点击画十个矩形的按钮后

6fd3bc9117234326bbfe17861eead821.png





二、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列开始插入


7f337bac429b4e449bb0115d08f0d792.png


运行结果

0a77bd9aed184686b4065acb3352a553.png

相关文章
|
6月前
|
Python
tkinter之菜单按钮
tkinter之菜单按钮
58 1
|
6月前
|
Python 容器
Tkinter:窗口控件配置
Tkinter:窗口控件配置
|
3月前
qml text跑马灯实现
qml text跑马灯实现
61 0
|
5月前
|
Python
Python tkinter的text控件加滚动条
Python tkinter的text控件加滚动条
|
6月前
|
Shell Python
Tkinter:功能按钮Button
Tkinter:功能按钮Button
|
6月前
|
Shell 数据安全/隐私保护 Python
Tkinter:文本框Entry
Tkinter:文本框Entry
|
6月前
|
Python
tkinter之下拉菜单
tkinter之下拉菜单
126 1
|
6月前
|
Python
tkinter之Combobox复选框
tkinter之Combobox复选框
164 2
|
6月前
|
Python
tkinter之ListBox示例
tkinter之ListBox示例
51 1
|
6月前
|
Python
tkinter之button添加背景图片
tkinter之button添加背景图片
154 1