Hộp văn bản gối trăn

Trong Tkinter có hai loại widget, loại thứ nhất là các widget thường như nút bấm, hộp văn bản… loại thứ hai là container, đây là những widget chứa các widget khác, chúng còn có một tên nữa là bố cục

Trong Tkinter có 3 loại bố cục là 

Style[].configure["TFrame", background="#333"] 
1, 
Style[].configure["TFrame", background="#333"] 
2và 
Style[].configure["TFrame", background="#333"] 
3 Trong đó 
Style[].configure["TFrame", background="#333"] 
4là kiểu bố cục tự do, thuật ngữ gọi là Định vị tuyệt đối, tức là bạn sẽ phải tự định vị trí cũng như kích thước của các tiện ích. Bố cục 
Style[].configure["TFrame", background="#333"] 
5sắp xếp các tiện ích của bạn theo chiều ngang và chiều dọc. Còn bố cục 
Style[].configure["TFrame", background="#333"] 
2sắp xếp tiện ích con theo dạng bảng

Design tự do

Thường thì khi thiết kế giao diện chúng ta sử dụng layout nhiều hơn là thiết kế theo kiểu tự do. Khi thiết kế theo kiểu tự làm này, chúng ta sẽ phải sắp xếp thứ tự định vị trí và kích thước cho các widget trên màn hình, nếu kích thước cửa sổ thay đổi thì kích thước và vị trí của các widget không thay đổi. Thiết kế theo kiểu tự động cũng rất bất tiện khi bạn muốn thay đổi, thêm hay bớt các widget thì hầu như bạn sẽ phải sắp xếp lại toàn bộ widget

from PIL import Image, ImageTk
from tkinter import Tk, Label, BOTH
from tkinter.ttk import Frame, Style

class Example[Frame]:
   def __init__[self, parent]:
     Frame.__init__[self, parent]
 
     self.parent = parent
     self.initUI[]
 
   def initUI[self]:
     self.parent.title["Absolute positioning"]
     self.pack[fill=BOTH, expand=1]
 
     Style[].configure["TFrame", background="#333"]
 
     bard = Image.open["C:\\bardejov.jpg"]
     bardejov = ImageTk.PhotoImage[bard]
     label1 = Label[self, image=bardejov]
     label1.image = bardejov
     label1.place[x=20, y=20]
  
     rot = Image.open["C:\\rotunda.jpg"]
     rotunda = ImageTk.PhotoImage[rot]
     label2 = Label[self, image=rotunda]
     label2.image = rotunda
     label2.place[x=40, y=160]
 
     minc = Image.open["C:\\mincol.jpg"]
     mincol = ImageTk.PhotoImage[minc]
     label3 = Label[self, image=mincol]
     label3.image = mincol
     label3.place[x=170, y=50]
 
root = Tk[]
root.geometry["300x280+300+300"]
app = Example[root]
root.mainloop[]

Trong ví dụ trên, chúng ta hiển thị 3 ảnh lên cửa sổ

from PIL import Image, ImageTk

Để hiển thị ảnh thì chúng ta có thể sử dụng mô-đun

Style[].configure["TFrame", background="#333"] 
7 trong gói
Style[].configure["TFrame", background="#333"] 
8 nhưng mô-đun này rất hạn chế nên ở đây mình sử dụng mô-đun
Style[].configure["TFrame", background="#333"] 
9 và
Style[].configure["TFrame", background="#333"] 
10 trong Gối thư viện, thư viện này không có sẵn trong Python 3 mà bạn phải tự động down về

Style[].configure["TFrame", background="#333"] 

Dòng trên sẽ tô màu nền cửa sổ là màu xám đen

Style[].configure["TFrame", background="#333"] 
1

Hai dòng trên sẽ tạo các đối tượng ảnh và tải chúng vào chương trình

Style[].configure["TFrame", background="#333"] 
4

Chúng ta tạo các đối tượng

Style[].configure["TFrame", background="#333"] 
11, đây là một lớp dùng để hiển thị chữ và ảnh

Style[].configure["TFrame", background="#333"] 
6

Chúng ta phải lưu lại các tham chiếu đến ảnh nếu không sẽ bị xóa

Style[].configure["TFrame", background="#333"] 
7

Chúng ta đặt ảnh tại vị trí x = 20 và y = 20

Cái nút

Trong ví dụ dưới đây, chúng ta sẽ hiển thị hai nút [nút nhấn] ở góc trái màn hình sử dụng bố cục

Style[].configure["TFrame", background="#333"] 
1

Style[].configure["TFrame", background="#333"] 
9

Chúng ta tạo ra 2 frame, frame đầu tiên là layout chính dùng để chứa toàn bộ widget. Khung thứ hai chúng ta đặt như khung đầu tiên lên và mở rộng kích thước theo cả chiều ngang và chiều dọc. Hai nút được đặt theo chiều ngang ở góc bên phải của cửa sổ

Style[].configure["TFrame", background="#333"] 
0

Hai dòng mã trên được tạo ra bởi

Style[].configure["TFrame", background="#333"] 
13 thứ hai, khung này sẽ chiếm phần lớn diện tích của
Style[].configure["TFrame", background="#333"] 
14 chính. Tham số ________ 115 hiệu ứng mô phỏng mô phỏng hiển thị 3D của
Style[].configure["TFrame", background="#333"] 
16 bên ngoài giá trị RAISED bạn có thể thử một số giá trị khác như FLAT, SUNKEN, GROOVE và RIDGE. Tham số
Style[].configure["TFrame", background="#333"] 
17 hiển thị đường viền của khung, mặc định tham số này là 0 nên bạn không thể thấy đường viền

Style[].configure["TFrame", background="#333"] 
6

Ở hai dòng trên chúng ta tạo nút đóng và tham chiếu đến đối tượng 

Style[].configure["TFrame", background="#333"] 
18. Phương thức
Style[].configure["TFrame", background="#333"] 
1
Style[].configure["TFrame", background="#333"] 
40quy định cách hiển thị của nút trên cửa sổ, tham số
Style[].configure["TFrame", background="#333"] 
41 sẽ đưa nút vào vị trí bên phải,
Style[].configure["TFrame", background="#333"] 
42 và
Style[].configure["TFrame", background="#333"] 
43 duy trì khoảng cách giữa nút với các tiện ích khác và với đường viền cửa sổ chính, ở khoảng cách này

from PIL import Image, ImageTk
0

Nút OK cũng được tạo ra tương tự và cũng được đưa sang bên phải màn hình, ở bên cạnh nút Đóng với khoảng cách 5 pixel

Tạo biểu mẫu

Trong ví dụ dưới đây, chúng ta tiếp tục tìm hiểu về bố cục

Style[].configure["TFrame", background="#333"] 
44

from PIL import Image, ImageTk
1

Chúng ta thiết kế một cửa sổ hiển thị biểu mẫu đánh giá

from PIL import Image, ImageTk
2

Đầu tiên chúng ta tạo khung chính để chứa các widget còn lại kể cả các khung khác nhau

from PIL import Image, ImageTk
3

Chúng ta tạo một khung và đặt 2 tiện ích vào đó, đó là một nhãn và một mục nhập.

Style[].configure["TFrame", background="#333"] 
11 là widget dùng để hiển thị văn bản,
Style[].configure["TFrame", background="#333"] 
46 là widget tạo văn bản nhập. Nhãn có độ dài cố định còn mục nhập thì độ dài tự động thay đổi theo kích thước cửa sổ nhờ vào 2 tham số
Style[].configure["TFrame", background="#333"] 
47 và
Style[].configure["TFrame", background="#333"] 
48. Frame thứ hai cũng tương tự

from PIL import Image, ImageTk
4

Trong khung thứ ba chúng ta đặt một L____149 và một T

Style[].configure["TFrame", background="#333"] 
60. Nhãn được đặt ở phía trên của khung, còn văn bản tự động co giãn theo kích thước cửa sổ

Bố cục lưới

Tiếp theo chúng ta sẽ tìm hiểu về bố cục

Style[].configure["TFrame", background="#333"] 
61

from PIL import Image, ImageTk
5

Đoạn mã trên thiết kế giao diện của một chiếc máy tính bỏ túi

from PIL import Image, ImageTk
6

Chúng ta quy định kiểu phông chữ thông qua tham số

Style[].configure["TFrame", background="#333"] 
62 và khoảng cách của khung với cửa sổ thông qua tham số đệm

from PIL import Image, ImageTk
7

Hai phương thức ________ 163và ________ 164 quy định khoảng cách giữa các widget

from PIL import Image, ImageTk
8

Chúng ta tạo một mục nhập để hiển thị số cũng như kết quả tính toán. Tham số

Style[].configure["TFrame", background="#333"] 
65 quy định cách thức co mở rộng theo kích thước cửa sổ, W+E tức là co mở rộng theo chiều từ trái sang phải

from PIL import Image, ImageTk
9

Nút

Style[].configure["TFrame", background="#333"] 
66 được đặt tại vị trí hàng 1 cột 0, chỉ số hàng và cột bắt đầu từ 0

Style[].configure["TFrame", background="#333"] 
0

Phương thức ________ 167 hiển thị các tiện ích con trên màn hình và khởi tạo kích thước cho chúng. Nếu chúng ta chỉ gọi

Style[].configure["TFrame", background="#333"] 
68 mà không đưa các tham số vào như trên thì kích thước của các widget luôn luôn là kích thước vừa đủ để bao bọc lấy đoạn văn bản bên trong, bên ngoài ra không có tham số truyền vào thì phương thức này sẽ . Bạn có thể kéo mở rộng cửa sổ để thấy cách nó hoạt động

Chủ Đề