PxExl-8. SỬ DỤNG PYTHON TKINTER TẠO GIAO DIỆN PHẦN MỀM (P8: CANVAS WIDGET)

I. Canvas Widget Trong Tkinter

Canvas Widget được dùng để tạo các hình ảnh từ đơn giản cho tới phức tạp
Cú pháp:
C = Canvas(root, height, width, bd, bg, ..)
Các đối số:

  • root = root window. 
  • height = height of the canvas widget. 
  • width = width of the canvas widget. 
  • bg = background colour for canvas. 
  • bd = border of the canvas window. 
  • scrollregion (w, n, e, s)tuple defined as a region for scrolling left, top, bottom and right. 
  • highlightcolor colour shown in the focus highlight. 
  • cursor It can be defined as a cursor for the canvas which can be a circle, a do, an arrow etc. 
  • confine decides if canvas can be accessed outside the scroll region. 
  • relief type of the border which can be SUNKEN, RAISED, GROOVE and RIDGE. 

Một số phương thức vẽ cơ bản:
* Tạo hình Oval:
oval = C.create_oval(x0, y0, x1, y1, options)

*Tạo hình arc/ vòng cung:
arc = C.create_arc(20, 50, 190, 240, start=0, extent=110, fill=”red”)

*Tạo hình Line/ đường thẳng
line = C.create_line(x0, y0, x1, y1, …, xn, yn, options)

Tạo hình polygon/ đa giác 
oval = C.create_polygon(x0, y0, x1, y1, …xn, yn, options)

Ví dụ 1 (Tạo hình 1 hình đơn giản)

from tkinter import * #Import module Tkinter
root = Tk() #Tạo màn hình window
C = Canvas(root, bg=”yellow”,
           height=250, width=300) #Khởi tạo widget Canvas
line = C.create_line(108, 120,
                     320, 40,
                     fill=”green”) #Tạo đường thẳng
arc = C.create_arc(180, 150, 80,
                   210, start=0,
                   extent=220,
                   fill=”red”) #Tạo hình vòng cung
oval = C.create_oval(80, 30, 140,
                     150,
                     fill=”blue”) #Tạo hình oval
C.pack() #Đặt vị trí Canvas widget
mainloop() #Tạo vòng lặp

Ví dụ 2 (Radio button  ở dạng button thông thường, khi đó ta loại bỏ indicator/indicatoron)

# Importing Tkinter module
from tkinter import *
from tkinter.ttk import *
# Creating master Tkinter window
master = Tk()
master.geometry(“175×175”)
# Tkinter string variable
# able to store any string value
v = StringVar(master, “1”)
# Dictionary to create multiple buttons
values = {“RadioButton 1” : “1”,
        “RadioButton 2” : “2”,
        “RadioButton 3” : “3”,
        “RadioButton 4” : “4”,
        “RadioButton 5” : “5”}
# Loop is used to create multiple Radiobuttons
# rather than creating each button separately
for (text, value) in values.items():
    Radiobutton(master, text = text, variable = v,
        value = value).pack(side = TOP, ipady = 5)
# Infinite loop can be terminated by
# keyboard or mouse interrupt
# or by any predefined function (destroy())
mainloop()

II. Các ví dụ cho Canvas Widget

Ví dụ 2 (Một bài paint đơn giản)

from tkinter import *
root = Tk()
# Create Title
root.title(  “Paint App “)
# specify size
root.geometry(“500×350”)
# create canvas widget.
w = Canvas(root, width = 400, height = 250)
# define function when 
# mouse double click is enabled
def display( event ):
    # Co-ordinates.
    x1, y1, x2, y2 = ( event.x – 3 ),
    ( event.y – 3 ), ( event.x + 3 ),
    ( event.y + 3 ) 
    # Colour
    Colour = “# 000fff000”
 # specify type of display
    w.create_line( x1, y1, x2,
                  y2, fill = Colour )
# call function when double
# click is enabled.
w.bind( “<B1-Motion>”, paint ) #B1-Motion là sự kiện khi dí chuột trái và di chuyển.
# create label.
l = Label( root, text = “Double Click and Drag to draw.” )
l.pack()
w.pack()
mainloop()

Đối với câu lệnh
x1,y1,x2,y2 = (event.x-3),(event.y-3), (event.x+3),(event.y+3)
Câu lệnh này liên quan đến kỹ thuật sử dụng chuột, các bạn xem thêm tại link:
https://www.w3schools.com/jsref/event_clientx.asp

Đối với câu lệnh:
w.bind( B1-Motion,paint)
Câu lệnh này liên quan đến bind và event trong Tkinter, các bạn đọc thêm tại:
https://stackoverflow.com/questions/32289175/list-of-all-tkinter-events

III. Kết Luận

Như vậy, chúng tôi đã tiếp tục giới thiệu tới các bạn các khái niệm cơ bản của Tkinter trong Python. Nếu có vấn đề nào chưa rõ, các bạn hãy liên hệ với chúng tôi để được giúp đỡ.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *