目录
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列开始插入
- 运行结果