Chúng tôi có thể sử dụng CSS trong tkinter không?

TkinterWeb cung cấp các liên kết cho tiện ích Tkhtml3 từ http. //tkhtml. tcl. tk/tkhtml. html, cho phép tải mã HTML và CSS vào ứng dụng Tkinter

Tất cả các hệ điều hành chính chạy Python 2. 7+ hoặc Python 3+ được hỗ trợ

Cách sử dụng

TkinterWeb cung cấp khung trình duyệt web, tiện ích nhãn có khả năng hiển thị HTML được tạo kiểu và trình quản lý hình học dựa trên HTML

Sẽ không dễ dàng hơn nếu bạn có thể tạo kiểu cho các cửa sổ Tk bằng Python bằng CSS phải không?

tính năng mong muốn

  • Sắp xếp các đối tượng Tk trong một cửa sổ với định nghĩa kiểu dáng CSS
  • Cung cấp định nghĩa cửa sổ Tk với định dạng tệp văn bản, chẳng hạn như định nghĩa HTML hoặc XML

Hỗ trợ CSS mong muốn cho

  • chức vụ
  • chiều rộng, chiều cao
  • ranh giới
  • cỡ chữ
  • căn chỉnh văn bản
  • đệm
  • lề
  • màu nền
  • trưng bày

phụ thuộc

  • tinycss2. https. //github. com/Kozea/tinycss2

Ví dụ về cách sử dụng mong muốn

import tinycss2

ss = tinycss2.parse_stylesheet("""

body {
  display: block;
  width: 100%;
  height: 100%;
  background-color: red;
}

import tkinter 

root = (...) # Creation of a tkinter window

style(root, ss) # Where the magic happens

""", skip_comments=False, skip_whitespace=False)

Để thêm kiểu dáng trên ttk. Nút chúng tôi không thể chuyển trực tiếp giá trị trong các tùy chọn. Đầu tiên chúng ta phải tạo đối tượng Style có thể tạo như sau.  

 style = ttk.Style()

Mã bên dưới sẽ chỉ thêm kiểu cho các Nút được chọn i. e, chỉ những nút đó sẽ được thay đổi trong đó chúng tôi sẽ chuyển tùy chọn kiểu
Mã số 1.  

Python3




# Import Required Module

from tkinterimport *

from tkinter.ttkimport *

 

 style = ttk.Style()
1

 style = ttk.Style()
2
 style = ttk.Style()
3
 style = ttk.Style()
4

 

 style = ttk.Style()
5

 style = ttk.Style()
6
 style = ttk.Style()
7
 style = ttk.Style()
8

 

 style = ttk.Style()
9

# Import Required Module0____1_______3 # Import Required Module2

 

# Import Required Module3

# Import Required Module4

# Import Required Module5

# Import Required Module6_______222_______7# Import Required Module8

 style = ttk.Style()
3

from0_______223_______1from2from3from4from3from6from3from8from9

tkinter0tkinter1

 style = ttk.Style()
3 tkinter3
 style = ttk.Style()
8

 

tkinter5

tkinter6

tkinter7

tkinter8

tkinter9

 style = ttk.Style()
3 import1
 style = ttk.Style()
3 import3from3

tkinter0# Import Required Module0

 style = ttk.Style()
3 # Import Required Module7from3

*0*1

 style = ttk.Style()
3 *3

*4_______1_______3 *6*7

 style = ttk.Style()
3 *9from0
 style = ttk.Style()
3 from2
 style = ttk.Style()
8

 

from4

 

from5

 style = ttk.Style()
3 import1_______1_______3 from9tkinter.ttk0
 style = ttk.Style()
3 tkinter.ttk2_______1_______8

tkinter.ttk4_______1_______3 tkinter.ttk6*7

 style = ttk.Style()
3 *9import0
 style = ttk.Style()
3 from4from0
 style = ttk.Style()
3 from2
 style = ttk.Style()
8

Khía cạnh theo chủ đề của các tiện ích Tk hiện đại là một trong những khía cạnh mạnh mẽ và thú vị nhất của bộ tiện ích mới hơn. Tuy nhiên, nó cũng là một trong những điều khó hiểu nhất

Chương này giải thích các kiểu (điều khiển giao diện của các tiện ích như nút) và chủ đề (là tập hợp các kiểu xác định giao diện của tất cả các tiện ích trong ứng dụng của bạn). Thay đổi chủ đề có thể mang lại cho ứng dụng của bạn một giao diện hoàn toàn khác

Chúng tôi có thể sử dụng CSS trong tkinter không?

Áp dụng các chủ đề khác nhau

Lưu ý rằng không chỉ màu sắc đã thay đổi mà cả hình dạng thực tế của từng vật dụng đã thay đổi. Phong cách và chủ đề cực kỳ linh hoạt

Tại sao?

Tuy nhiên, trước khi bạn bắt đầu, rất ít ứng dụng sẽ được hưởng lợi từ việc chuyển đổi các chủ đề như thế này. Một số trò chơi hoặc chương trình giáo dục có thể là ngoại lệ. Sử dụng chủ đề Tk tiêu chuẩn cho một nền tảng nhất định sẽ hiển thị các tiện ích con theo cách mọi người muốn nhìn thấy chúng, đặc biệt nếu chúng đang chạy macOS và Windows

Trên các hệ thống Linux, có ít tiêu chuẩn hóa hơn về giao diện. Người dùng mong đợi (và cảm thấy thoải mái hơn với) một số thay đổi và "mát mẻ". " Do các bộ tiện ích khác nhau (thường là GTK và QT) được sử dụng bởi trình quản lý cửa sổ, bảng điều khiển và các tiện ích hệ thống khác, Tk không thể kết hợp liền mạch với các cài đặt hiện tại trên bất kỳ hệ thống cụ thể nào. Hầu hết các ảnh chụp màn hình Linux trong hướng dẫn này sử dụng chủ đề

% ttk::style theme use
aqua
2 của Tk. Mặc dù người dùng đã quen với sự thay đổi, vẫn có giới hạn đối với những gì mà hầu hết người dùng sẽ chấp nhận. Một ví dụ điển hình là kiểu dáng của các widget cốt lõi trong bộ widget cổ điển của Tk, phù hợp với OSF/Motif vào khoảng năm 1992

Các kiểu và chủ đề, được sử dụng theo cách được nhắm mục tiêu nhiều hơn và với sự hạn chế đáng kể, có thể đóng một vai trò trong các ứng dụng hiện đại. Chương này giải thích tại sao và khi nào bạn có thể muốn sử dụng chúng và cách thực hiện. Chúng ta sẽ bắt đầu bằng cách vẽ song song giữa phong cách và chủ đề của Tk và một lĩnh vực phát triển phần mềm khác

Hiểu Phong cách và Chủ đề

Nếu bạn quen thuộc với việc phát triển web, bạn sẽ biết về biểu định kiểu xếp tầng (CSS). Có hai cách nó có thể được sử dụng để tùy chỉnh giao diện của một phần tử trong trang HTML của bạn. Một cách là thêm một loạt các thuộc tính kiểu dáng (phông chữ, màu sắc, đường viền, v.v. ) trực tiếp đến một phần tử trong mã HTML của bạn thông qua thuộc tính

% ttk::style theme use
aqua
3. Ví dụ

Meltdown imminent!

Một cách khác để sử dụng CSS là gắn một lớp vào mỗi widget thông qua thuộc tính

% ttk::style theme use
aqua
4. Chi tiết về cách các phần tử của lớp đó xuất hiện được cung cấp ở nơi khác, thường là trong một tệp CSS riêng. Bạn có thể đính kèm cùng một lớp cho nhiều phần tử và tất cả chúng sẽ có hình thức giống nhau. Bạn không cần lặp lại đầy đủ chi tiết cho mọi yếu tố. Quan trọng hơn, bạn tách nội dung hợp lý của trang web (HTML) khỏi giao diện của nó (CSS)

Meltdown imminent!
...

Quay lại TK

  • Trong các tiện ích Tk cổ điển, tất cả các tùy chỉnh giao diện yêu cầu chỉ định từng chi tiết trên các tiện ích riêng lẻ, giống như luôn sử dụng thuộc tính HTML
    % ttk::style theme use
    aqua
    3
  • Trong các tiện ích Tk theo chủ đề, tất cả các tùy chỉnh giao diện được thực hiện thông qua việc đính kèm một kiểu vào một tiện ích, giống như sử dụng thuộc tính HTML
    % ttk::style theme use
    aqua
    4. Một cách riêng biệt, bạn xác định cách các tiện ích có kiểu đó sẽ xuất hiện, giống như cách viết CSS
  • Không giống như HTML, bạn không thể tự do trộn và kết hợp. Bạn không thể tùy chỉnh một số mục hoặc nút theo chủ đề bằng kiểu và các mục khác bằng cách thay đổi trực tiếp các tùy chọn giao diện

Có, có một vài trường hợp ngoại lệ, chẳng hạn như nhãn nơi bạn có thể tùy chỉnh phông chữ và màu sắc thông qua cả tùy chọn kiểu và cấu hình

Những lợi ích

Vậy tại sao lại sử dụng kiểu và chủ đề trong Tk?

Điều đó làm cho mã sạch hơn và ít lặp lại hơn. Nếu bạn có 20 tiện ích nhập trong ứng dụng của mình, bạn không cần lặp lại các chi tiết giao diện chính xác mỗi khi bạn tạo một tiện ích (hoặc viết hàm bao bọc). Thay vào đó, bạn chỉ định cho họ một phong cách

Styles cũng đặt tất cả các quyết định về ngoại hình ở một nơi. Và bởi vì các kiểu cho một nút và các kiểu cho các tiện ích con khác có thể chia sẻ các yếu tố chung, nó thúc đẩy tính nhất quán và cải thiện khả năng sử dụng lại

Các kiểu cũng có nhiều lợi ích cho tác giả widget. Các widget có thể ủy thác hầu hết các quyết định về giao diện cho các kiểu. Tác giả tiện ích không còn phải mã hóa logic theo hiệu ứng "khi trạng thái bị tắt, hãy tham khảo tùy chọn cấu hình 'disabledforeground' và sử dụng tùy chọn đó cho màu nền trước. " Điều đó không chỉ làm cho các widget mã hóa dài hơn (và lặp đi lặp lại nhiều hơn) mà còn hạn chế cách một widget có thể được thay đổi dựa trên trạng thái của nó. Nếu tác giả tiện ích bỏ qua logic để thay đổi phông chữ khi trạng thái thay đổi, thì bạn đã không may mắn với tư cách là nhà phát triển ứng dụng sử dụng tiện ích

Khi sử dụng các kiểu, tác giả tiện ích không cần cung cấp mã cho mọi tùy chọn giao diện có thể có. Điều đó không chỉ đơn giản hóa tiện ích mà còn đảm bảo một cách nghịch lý rằng có thể thiết lập phạm vi xuất hiện rộng hơn, bao gồm cả những thứ mà tác giả tiện ích có thể không lường trước được

Sử dụng chủ đề hiện có

Trước khi đi sâu vào các vấn đề quan trọng hơn về việc sửa đổi và áp dụng các kiểu trang nhã và có chọn lọc để cải thiện khả năng sử dụng của ứng dụng và độ sạch của mã của bạn, hãy giải quyết các vấn đề thú vị. sử dụng các chủ đề hiện có để thay đổi hoàn toàn ứng dụng của bạn

Chủ đề được xác định bởi một tên. Bạn có thể lấy tên của tất cả các chủ đề có sẵn

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')

Tkinter gói gọn tất cả các thao tác kiểu trong lớp

% ttk::style theme use
aqua
7. Do đó, chúng tôi sẽ cần một thể hiện của lớp đó cho hoạt động này và các hoạt động khác

% ttk::style theme names
aqua clam alt default classic

>> Tk::Tile::Style.theme_names
=> ["aqua", "step", "clam", "alt", "default", "classic"]

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic

Chúng tôi có thể sử dụng CSS trong tkinter không?

Chủ đề tích hợp

Bên cạnh các chủ đề tích hợp sẵn (

% ttk::style theme use
aqua
2,
% ttk::style theme use
aqua
9,
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
0 và
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
1), macOS bao gồm một chủ đề có tên
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
2 để phù hợp với phong cách toàn hệ thống, trong khi Windows bao gồm các chủ đề có tên
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
3,
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
4 và
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
5

Chỉ có một chủ đề có thể hoạt động tại một thời điểm. Để có được tên của chủ đề hiện đang được sử dụng, hãy sử dụng như sau

% ttk::style theme use
aqua

>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"

Kể từ Ruby/Tk 0. 2. 0 (phiên bản hiện tại tính đến năm 2020), Tk. Ngói. Phong cách. API theme_use không cho phép truy vấn kiểu hiện tại

Perl> Tkx::ttk__style_theme_use()
aqua

API này, ban đầu được nhắm mục tiêu cho Tk 8. 6, đã được chuyển ngược sang Tk 8. 5. 9. Nếu bạn đang sử dụng phiên bản Tk cũ hơn, việc nhận thông tin này sẽ phức tạp hơn một chút

Chuyển sang một chủ đề mới có thể được thực hiện với

ttk::style theme use themename

Meltdown imminent!
...
0

Meltdown imminent!
...
1

Điều này thực sự làm gì? . Do đó, việc làm này sẽ thay thế tất cả các kiểu hiện có bằng tập hợp các kiểu do chủ đề xác định. Cuối cùng, nó làm mới tất cả các tiện ích để chúng có giao diện được mô tả bởi chủ đề mới

Chủ đề của bên thứ ba

Với một chút tìm kiếm xung quanh, bạn có thể tìm thấy một số chủ đề bổ trợ hiện có sẵn để tải xuống. Một điểm khởi đầu tốt là https. //wiki. tcl-lang. org/trang/Danh sách+của+ttk+Chủ đề

Mặc dù các chủ đề có thể được xác định bằng bất kỳ ngôn ngữ nào mà Tk hỗ trợ, nhưng hầu hết những gì bạn tìm thấy đều được viết bằng Tcl. Làm thế nào bạn có thể cài đặt chúng để chúng có sẵn để sử dụng trong ứng dụng của bạn?

Ví dụ: hãy sử dụng chủ đề "awdark", có sẵn từ https. //nguồnforge. mạng/dự án/tcl-awtheme/. Tải xuống và giải nén tệp

>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
6 ở đâu đó. Bạn sẽ nhận thấy nó chứa một loạt các tệp
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
7, một thư mục con
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
8 chứa nhiều thư mục hơn với các hình ảnh được chủ đề sử dụng, v.v.

Một trong các tệp có tên là

>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
9. Điều này xác định nó là một gói Tcl, tương tự như một mô-đun trong các ngôn ngữ khác. Nếu chúng ta nhìn vào bên trong, bạn sẽ thấy một loạt các dòng như
Perl> Tkx::ttk__style_theme_use()
aqua
0. Ở đây,
Perl> Tkx::ttk__style_theme_use()
aqua
1 là tên của gói và
Perl> Tkx::ttk__style_theme_use()
aqua
2 là số phiên bản của nó. Không có gì lạ, như trong trường hợp này, đối với một tệp
>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
9 duy nhất cung cấp một số gói

Để sử dụng nó, chúng ta cần cho Tcl biết nơi tìm gói (thông qua việc thêm thư mục của nó vào

Perl> Tkx::ttk__style_theme_use()
aqua
4 của Tcl) và tên của gói sẽ sử dụng

Meltdown imminent!
...
2

Meltdown imminent!
...
3

Meltdown imminent!
...
4

Meltdown imminent!
...
5

Thay vào đó, nếu chủ đề được triển khai dưới dạng một tệp nguồn Tcl duy nhất, không có

>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
9, thì bạn có thể cung cấp chủ đề như thế này

Meltdown imminent!
...
6

Meltdown imminent!
...
7

Meltdown imminent!
...
8

Meltdown imminent!
...
9

Giờ đây, bạn có thể sử dụng chủ đề trong ứng dụng của riêng mình, giống như cách bạn sử dụng chủ đề tích hợp sẵn

Sử dụng kiểu

Bây giờ chúng ta sẽ giải quyết vấn đề phức tạp hơn trong việc tận dụng tối đa các kiểu và chủ đề trong ứng dụng của bạn, chứ không chỉ thay đổi giao diện của nó bằng một chủ đề hiện có

Các định nghĩa

Trước tiên chúng ta cần giới thiệu một vài khái niệm cơ bản

Lớp tiện ích

Một lớp tiện ích xác định loại tiện ích cụ thể, cho dù đó là nút, nhãn, canvas, v.v. Tất cả các vật dụng theo chủ đề có một lớp mặc định. Các nút có lớp

Perl> Tkx::ttk__style_theme_use()
aqua
6, nhãn
Perl> Tkx::ttk__style_theme_use()
aqua
7, v.v.

Trạng thái tiện ích

Trạng thái tiện ích con cho phép một tiện ích con có nhiều giao diện hoặc hành vi, tùy thuộc vào những thứ như vị trí chuột, các tùy chọn trạng thái khác nhau do ứng dụng đặt, v.v.

Như bạn sẽ nhớ lại, tất cả các widget theo chủ đề đều duy trì một tập hợp các cờ trạng thái nhị phân, được truy cập bằng các phương thức

Perl> Tkx::ttk__style_theme_use()
aqua
8 và
Perl> Tkx::ttk__style_theme_use()
aqua
9. những lá cờ là.
ttk::style theme use themename
0,
ttk::style theme use themename
1,
ttk::style theme use themename
2,
ttk::style theme use themename
3,
ttk::style theme use themename
4,
ttk::style theme use themename
5,
ttk::style theme use themename
6,
ttk::style theme use themename
7 và
ttk::style theme use themename
8. Tất cả các vật dụng đều có cùng một bộ cờ trạng thái, mặc dù chúng có thể bỏ qua một số trong số chúng (e. g. , tiện ích nhãn có thể sẽ bỏ qua cờ trạng thái
ttk::style theme use themename
8). Xem trang tiện ích theo chủ đề trong hướng dẫn tham khảo để biết ý nghĩa chính xác của từng lá cờ tiểu bang

Một phong cách mô tả sự xuất hiện (hoặc sự xuất hiện) của một lớp widget. Tất cả các tiện ích theo chủ đề có cùng lớp tiện ích sẽ có (các) giao diện giống nhau

Các kiểu được gọi bằng tên của lớp widget mà chúng mô tả. Ví dụ: kiểu

Perl> Tkx::ttk__style_theme_use()
aqua
6 xác định giao diện của tất cả các tiện ích với lớp
Perl> Tkx::ttk__style_theme_use()
aqua
6

Các kiểu biết về các trạng thái khác nhau và một kiểu có thể xác định các giao diện khác nhau dựa trên trạng thái của tiện ích. Ví dụ: một kiểu có thể chỉ định giao diện của tiện ích sẽ thay đổi như thế nào nếu cờ trạng thái

ttk::style theme use themename
3 được đặt

Một chủ đề là một tập hợp các phong cách. Mặc dù mỗi kiểu là dành riêng cho widget (một cho các nút, một cho các mục nhập, v.v. ), một chủ đề tập hợp nhiều phong cách lại với nhau. Tất cả các phong cách trong cùng một chủ đề sẽ được thiết kế để "ăn khớp" trực quan với nhau. (Thật không may, Tk không hạn chế thiết kế hoặc phán đoán xấu về mặt kỹ thuật. )

Sử dụng một chủ đề cụ thể trong một ứng dụng thực sự có nghĩa là theo mặc định, giao diện của mỗi tiện ích sẽ được kiểm soát bởi kiểu trong chủ đề chịu trách nhiệm cho lớp tiện ích đó

Tên kiểu

Mỗi phong cách có một tên. Nếu bạn định sửa đổi kiểu, tạo kiểu mới hoặc sử dụng kiểu cho tiện ích con, bạn cần biết tên của nó

Làm thế nào để bạn biết tên của các phong cách là gì? . Nếu nó trống, điều đó có nghĩa là tiện ích đang sử dụng kiểu mặc định cho tiện ích. Bạn có thể truy xuất thông qua lớp của tiện ích. Ví dụ

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
0

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
1

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
2

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
3

Trong trường hợp này, phong cách đang được sử dụng là

Perl> Tkx::ttk__style_theme_use()
aqua
6. Các kiểu mặc định cho các tiện ích theo chủ đề khác được đặt tên tương tự, e. g. ,
Meltdown imminent!
...
05,
Perl> Tkx::ttk__style_theme_use()
aqua
7, v.v.

Luôn luôn khôn ngoan khi kiểm tra các chi tiết cụ thể. Ví dụ: lớp của tiện ích treeview là

Meltdown imminent!
...
07, không phải
Meltdown imminent!
...
08

Tuy nhiên, ngoài các kiểu mặc định, các kiểu có thể được đặt tên khá nhiều. Bạn có thể tạo phong cách của riêng mình (hoặc sử dụng chủ đề có phong cách riêng) có tên là

Meltdown imminent!
...
09,
Meltdown imminent!
...
10 hoặc thậm chí là
Meltdown imminent!
...
11 (không phải là lựa chọn sáng suốt)

Thường xuyên hơn, bạn sẽ tìm thấy những cái tên như

Meltdown imminent!
...
12 hoặc
Meltdown imminent!
...
13. Những gợi ý biến thể của một phong cách cơ sở;

Khả năng truy xuất danh sách tất cả các kiểu hiện có hiện không được hỗ trợ. Điều này có thể sẽ xuất hiện trong Tk 8. 7 dưới dạng một lệnh mới,

Meltdown imminent!
...
14, trả về danh sách các kiểu được triển khai bởi một chủ đề. Nó cũng đề xuất thêm một phương thức
% ttk::style theme use
aqua
3 cho tất cả các widget, vì vậy bạn không cần phải kiểm tra cả tùy chọn cấu hình
% ttk::style theme use
aqua
3 của widget và lớp của nó. Xem MẸO #584

Áp dụng một phong cách

Để sử dụng một kiểu có nghĩa là áp dụng kiểu đó cho một tiện ích con riêng lẻ. Tất cả những gì bạn cần là tên của phong cách và tiện ích để áp dụng nó vào. Đặt kiểu có thể được thực hiện tại thời điểm tạo

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
4

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
5

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
6

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
7

Kiểu của widget cũng có thể được thay đổi sau này với tùy chọn cấu hình

% ttk::style theme use
aqua
3

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
8

>>> s = ttk.Style()
>>> s.theme_names()
('aqua', 'step', 'clam', 'alt', 'default', 'classic')
9

% ttk::style theme names
aqua clam alt default classic
0

% ttk::style theme names
aqua clam alt default classic
1

Tạo một phong cách đơn giản

Vậy làm thế nào để chúng ta tạo một phong cách mới như

Meltdown imminent!
...
18?

Trong những tình huống như thế này, bạn đang tạo một phong cách mới chỉ khác một chút so với phong cách hiện có. Đây là lý do phổ biến nhất để tạo kiểu mới

Ví dụ: bạn muốn hầu hết các nút trong ứng dụng của mình giữ nguyên hình thức thông thường nhưng có một số nút "khẩn cấp" được đánh dấu khác. Tạo một phong cách mới (e. g. ,

Meltdown imminent!
...
18), bắt nguồn từ kiểu cơ sở (
Perl> Tkx::ttk__style_theme_use()
aqua
6), là phù hợp

Đặt trước một tên khác (

Meltdown imminent!
...
21) theo sau là một dấu chấm vào một kiểu hiện có sẽ tạo ra một kiểu mới bắt nguồn từ kiểu hiện có. Kiểu mới sẽ có các tùy chọn chính xác giống như kiểu hiện có ngoại trừ những khác biệt được chỉ định

% ttk::style theme names
aqua clam alt default classic
2

% ttk::style theme names
aqua clam alt default classic
3

% ttk::style theme names
aqua clam alt default classic
4

% ttk::style theme names
aqua clam alt default classic
5

Như đã trình bày trước đó, bạn có thể áp dụng kiểu đó cho một tiện ích nút riêng lẻ thông qua tùy chọn cấu hình

% ttk::style theme use
aqua
3 của nó. Mọi tiện ích nút khác sẽ giữ nguyên hình dạng bình thường của nó

Làm thế nào để bạn biết những tùy chọn nào có sẵn để thay đổi cho một phong cách nhất định?

Bạn có thể có mã hiện có bằng cách sử dụng các tiện ích cổ điển mà bạn muốn chuyển sang các tiện ích theo chủ đề. Hầu hết các thay đổi về giao diện được thực hiện cho các tiện ích cổ điển thông qua các tùy chọn cấu hình có thể bị loại bỏ. Đối với những cái không thể, bạn có thể cần tạo một kiểu mới, như được hiển thị ở trên

Các thay đổi về diện mạo của từng tiểu bang có thể được xử lý tương tự. Trong Tk cổ điển, một số tiện ích hỗ trợ một số thay đổi trạng thái thông qua các tùy chọn cấu hình. Ví dụ: đặt tùy chọn

Perl> Tkx::ttk__style_theme_use()
aqua
8 của nút thành
ttk::style theme use themename
1 sẽ vẽ nút đó bằng nhãn màu xám. Một số cho phép một trạng thái bổ sung,
ttk::style theme use themename
0, đại diện cho một diện mạo khác. Bạn có thể thay đổi giao diện của tiện ích ở nhiều trạng thái thông qua một tập hợp các tùy chọn cấu hình, chẳng hạn như. g. ,
Meltdown imminent!
...
26,
Meltdown imminent!
...
27 và
Meltdown imminent!
...
28

Thay đổi trạng thái thông qua các tùy chọn cấu hình nên được thay đổi để sử dụng phương pháp

Perl> Tkx::ttk__style_theme_use()
aqua
8 trên các vật dụng theo chủ đề. Các tùy chọn cấu hình để sửa đổi giao diện của tiện ích ở một trạng thái cụ thể sẽ được xử lý theo kiểu

Các tiện ích Tk cổ điển cũng hỗ trợ một dạng phong cách rất nguyên thủy mà bạn có thể gặp phải. Điều này đã sử dụng cơ sở dữ liệu tùy chọn, giao diện người dùng hiện không rõ ràng cho các tệp cấu hình kiểu X11

Trong Tk cổ điển, tất cả các nút có cùng loại (

Meltdown imminent!
...
30), tất cả các nhãn có cùng loại (
Meltdown imminent!
...
31), v.v. Bạn có thể sử dụng lớp widget này để xem xét nội tâm và để thay đổi các tùy chọn trên toàn cầu thông qua cơ sở dữ liệu tùy chọn. Ví dụ: nó cho phép bạn nói rằng tất cả các nút phải có nền màu đỏ

Một vài tiện ích Tk cổ điển, bao gồm các tiện ích khung và cấp cao nhất, cho phép bạn thay đổi lớp tiện ích của một tiện ích cụ thể khi nó được tạo lần đầu bằng cách cung cấp tùy chọn cấu hình

% ttk::style theme use
aqua
4. Ví dụ: bạn có thể chỉ định rằng một tiện ích khung cụ thể có lớp
Meltdown imminent!
...
33, trong khi các tiện ích khung khác sẽ có lớp mặc định là
Meltdown imminent!
...
34. Bạn có thể sử dụng cơ sở dữ liệu tùy chọn để thay đổi giao diện của chỉ các khung
Meltdown imminent!
...
33

Phong cách và chủ đề lấy ý tưởng đơn giản đó và tạo cho nó tên lửa đẩy

Có gì bên trong một phong cách?

Nếu tất cả những gì bạn muốn làm là sử dụng một phong cách hoặc tạo một phong cách mới với một vài điều chỉnh, giờ đây bạn đã biết mọi thứ mình cần. Tuy nhiên, nếu bạn muốn thực hiện những thay đổi quan trọng hơn, mọi thứ bắt đầu trở nên "thú vị". "

yếu tố

Mặc dù mỗi kiểu kiểm soát một loại tiện ích con, nhưng mỗi tiện ích con thường bao gồm các phần nhỏ hơn, được gọi là phần tử. Công việc của tác giả phong cách là xây dựng toàn bộ tiện ích con từ những phần tử nhỏ hơn này. Những yếu tố này là gì phụ thuộc vào tiện ích

Đây là một ví dụ về một nút. Nó có thể có một đường viền ở bên ngoài. Đó là một yếu tố. Ngay bên trong đó, có thể có một vòng lấy nét. Thông thường, đó chỉ là màu nền, nhưng có thể được đánh dấu khi người dùng nhấn vào nút. Vì vậy, đó là một yếu tố thứ hai. Sau đó, có thể có một số khoảng cách giữa vòng lấy nét đó và nhãn của nút. Khoảng cách đó là một yếu tố thứ ba. Cuối cùng, nhãn văn bản của nút chính là thành phần thứ tư

Chúng tôi có thể sử dụng CSS trong tkinter không?

Các yếu tố có thể có của một nút

Tại sao tác giả phong cách có thể chia nó theo cách đó? . Lưu ý rằng đây chỉ là một ví dụ về cách một nút có thể được tạo từ các phần tử. Các phong cách và chủ đề khác nhau có thể (và làm) thực hiện điều này theo những cách khác nhau

Dưới đây là một ví dụ về thanh cuộn dọc. Nó bao gồm một phần tử "máng", chứa các phần tử khác. Chúng bao gồm các phần tử mũi tên lên và xuống ở hai đầu và phần tử "ngón tay cái" ở giữa (có thể có các phần tử bổ sung, như đường viền)

Chúng tôi có thể sử dụng CSS trong tkinter không?

Các phần tử có thể có của thanh cuộn

Cách trình bày

Bên cạnh việc chỉ định các phần tử nào tạo nên một tiện ích, một kiểu cũng xác định cách các phần tử đó được sắp xếp trong tiện ích. Đây được gọi là bố cục của họ. Nút của chúng tôi có phần tử nhãn bên trong phần tử khoảng cách, bên trong phần tử vòng lấy nét, bên trong phần tử đường viền. Bố cục hợp lý của nó là thế này

% ttk::style theme names
aqua clam alt default classic
6

Chúng ta có thể hỏi To về bố cục của phong cách ________ 54 _______6

% ttk::style theme names
aqua clam alt default classic
7

% ttk::style theme names
aqua clam alt default classic
8

% ttk::style theme names
aqua clam alt default classic
9

>> Tk::Tile::Style.theme_names
=> ["aqua", "step", "clam", "alt", "default", "classic"]
0

Nếu chúng ta làm sạch nó và định dạng nó một chút, chúng ta sẽ nhận được một cái gì đó với cấu trúc này

>> Tk::Tile::Style.theme_names
=> ["aqua", "step", "clam", "alt", "default", "classic"]
1

Điều này bắt đầu có ý nghĩa; . Mỗi phần tử có các tùy chọn thành phần khác nhau, chẳng hạn như

Meltdown imminent!
...
41,
Meltdown imminent!
...
42 và
Meltdown imminent!
...
43 chỉ định bố cục hoặc kích thước. Không đi vào quá nhiều chi tiết vào thời điểm này, chúng ta có thể thấy rõ bố cục lồng nhau dựa trên các thuộc tính
Meltdown imminent!
...
41 và
Meltdown imminent!
...
42

Styles sử dụng phiên bản đơn giản hóa của trình quản lý hình học

Meltdown imminent!
...
46 của Tk để chỉ định bố cục phần tử. Điều này được trình bày chi tiết trong trang hướng dẫn tham khảo phong cách

Tùy chọn phần tử

Mỗi yếu tố này có một số tùy chọn khác nhau. Ví dụ: phần tử nhãn có phông chữ và màu nền trước. Một phần tử đại diện cho ngón tay cái của thanh cuộn có thể có một tùy chọn để đặt màu nền của nó và một tùy chọn khác để cung cấp chiều rộng của đường viền. Chúng có thể được tùy chỉnh để điều chỉnh giao diện của các phần tử trong tiện ích tổng thể

Bạn có thể xác định những tùy chọn nào có sẵn cho từng phần tử?

>> Tk::Tile::Style.theme_names
=> ["aqua", "step", "clam", "alt", "default", "classic"]
2

>> Tk::Tile::Style.theme_names
=> ["aqua", "step", "clam", "alt", "default", "classic"]
3

>> Tk::Tile::Style.theme_names
=> ["aqua", "step", "clam", "alt", "default", "classic"]
4

>> Tk::Tile::Style.theme_names
=> ["aqua", "step", "clam", "alt", "default", "classic"]
5

Trong các phần sau, chúng ta sẽ xem xét cách không hoàn toàn đơn giản để làm việc với các tùy chọn phần tử

Thao tác kiểu

Trong phần này, chúng ta sẽ xem cách thay đổi diện mạo của kiểu bằng cách sửa đổi các tùy chọn kiểu. Bạn có thể thực hiện việc này bằng cách sửa đổi kiểu hiện có hoặc thông thường hơn bằng cách tạo kiểu mới. Chúng ta đã thấy cách tạo một phong cách đơn giản bắt nguồn từ một phong cách khác trước đó

% ttk::style theme names
aqua clam alt default classic
2

% ttk::style theme names
aqua clam alt default classic
3

% ttk::style theme names
aqua clam alt default classic
4

% ttk::style theme names
aqua clam alt default classic
5

Sửa đổi một tùy chọn kiểu

Sửa đổi một tùy chọn cho một kiểu hiện có được thực hiện tương tự như sửa đổi bất kỳ tùy chọn cấu hình nào khác, bằng cách chỉ định kiểu, tên của tùy chọn và giá trị mới

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
0

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
1

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
2

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
3

Bạn sẽ sớm tìm hiểu thêm về các tùy chọn hợp lệ là gì

Nếu bạn sửa đổi một kiểu hiện có, như chúng ta đã thực hiện ở đây với

Perl> Tkx::ttk__style_theme_use()
aqua
6, sửa đổi đó sẽ áp dụng cho tất cả các tiện ích sử dụng kiểu đó (theo mặc định, tất cả các nút). Đó cũng có thể là những gì bạn muốn làm

Để truy xuất giá trị hiện tại của một tùy chọn, hãy sử dụng phương thức

Meltdown imminent!
...
50

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
4

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
5

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
6

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
7

Tùy chọn kiểu cụ thể của tiểu bang

Bên cạnh các tùy chọn cấu hình bình thường cho kiểu, tác giả tiện ích có thể đã chỉ định các tùy chọn khác để sử dụng khi tiện ích ở trạng thái tiện ích cụ thể. Ví dụ: khi một nút bị tắt, nó có thể thay đổi nhãn của nút thành màu xám

Hãy nhớ rằng trạng thái bao gồm một hoặc nhiều cờ trạng thái (hoặc phủ định của chúng), được đặt theo phương thức

Perl> Tkx::ttk__style_theme_use()
aqua
8 của tiện ích hoặc được truy vấn thông qua phương thức
Perl> Tkx::ttk__style_theme_use()
aqua
9

Bạn có thể chỉ định các biến thể theo trạng thái cụ thể cho một hoặc nhiều tùy chọn cấu hình của kiểu bằng bản đồ. Đối với mỗi tùy chọn cấu hình, bạn có thể chỉ định danh sách các trạng thái tiện ích, cùng với giá trị mà tùy chọn đó sẽ được chỉ định khi tiện ích ở trạng thái đó

Ví dụ sau đây cung cấp các biến thể sau từ giao diện bình thường của nút

  • khi tiện ích ở trạng thái bị tắt, màu nền phải được đặt thành
    Meltdown imminent!
    ...
    
    53
  • khi tiện ích ở trạng thái hoạt động (di chuột qua nó), màu nền phải được đặt thành
    Meltdown imminent!
    ...
    
    54
  • khi tiện ích ở trạng thái bị tắt, màu nền trước phải được đặt thành
    Meltdown imminent!
    ...
    
    55 (điều này bổ sung cho thay đổi màu nền mà chúng tôi đã lưu ý)
  • khi tiện ích ở trạng thái nhấn nút và tiện ích không bị tắt, phần nổi phải được đặt thành
    Meltdown imminent!
    ...
    
    56

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
8

Perl> Tkx::ttk__style_theme_names()
aqua clam alt default classic
9

% ttk::style theme use
aqua
0

% ttk::style theme use
aqua
1

Vì các trạng thái tiện ích có thể chứa nhiều cờ nên nhiều trạng thái có thể khớp với một tùy chọn (e. g. ,

ttk::style theme use themename
3 và
Meltdown imminent!
...
58 sẽ khớp nhau nếu cờ trạng thái
ttk::style theme use themename
3 của tiện ích con được đặt). Danh sách các trạng thái được đánh giá theo thứ tự bạn cung cấp trong lệnh bản đồ. Trạng thái đầu tiên trong danh sách phù hợp được sử dụng

Âm thanh khó khăn với bạn?

Bây giờ bạn đã biết rằng các kiểu bao gồm các thành phần, mỗi thành phần có nhiều tùy chọn khác nhau, được kết hợp với nhau trong một bố cục. Bạn có thể thay đổi các tùy chọn về kiểu để làm cho tất cả các tiện ích sử dụng kiểu xuất hiện khác nhau. Bất kỳ tiện ích con nào sử dụng kiểu đó đều có giao diện mà kiểu đó xác định. Chủ đề thu thập toàn bộ tập hợp các kiểu có liên quan, giúp dễ dàng thay đổi giao diện của toàn bộ giao diện người dùng của bạn

Vậy điều gì làm cho phong cách và chủ đề trở nên khó khăn trong thực tế? . Đầu tiên

Bạn chỉ có thể sửa đổi các tùy chọn cho một kiểu chứ không phải các tùy chọn phần tử (đôi khi ngoại trừ)

Chúng tôi đã nói trước đó về việc xác định các thành phần được sử dụng trong kiểu bằng cách kiểm tra bố cục của nó và xác định những tùy chọn nào có sẵn cho từng thành phần. Nhưng khi chúng tôi thực hiện các thay đổi đối với một kiểu, dường như chúng tôi đang định cấu hình một tùy chọn cho kiểu đó mà không chỉ định một thành phần riêng lẻ. Chuyện gì đang xảy ra vậy?

Một lần nữa, sử dụng ví dụ về nút của chúng tôi, chúng tôi đã có một phần tử

Meltdown imminent!
...
40, trong số những thứ khác, có tùy chọn cấu hình
Meltdown imminent!
...
61. Điều xảy ra là khi phần tử
Meltdown imminent!
...
40 đó được vẽ, nó sẽ nhìn vào tùy chọn cấu hình
Meltdown imminent!
...
61 được đặt trên kiểu để xác định phông chữ sẽ tự vẽ.

Để hiểu tại sao, bạn cần biết rằng khi một kiểu bao gồm một phần tử như một phần của nó, thì phần tử đó không duy trì bất kỳ bộ lưu trữ (dành riêng cho phần tử) nào. Đặc biệt, nó không tự lưu trữ bất kỳ tùy chọn cấu hình nào. Khi cần truy xuất các tùy chọn, nó sẽ thực hiện thông qua kiểu chứa, được truyền cho phần tử. Do đó, các yếu tố riêng lẻ là các đối tượng "flyweight" theo cách nói của mẫu GoF

Tương tự, bất kỳ phần tử nào khác sẽ tra cứu các tùy chọn cấu hình của chúng từ các tùy chọn được đặt trên kiểu. Điều gì sẽ xảy ra nếu hai phần tử sử dụng cùng một tùy chọn cấu hình (như màu nền)? . Bạn không thể để một phần tử sử dụng một màu nền và phần tử kia sử dụng một màu nền khác

Ngoại trừ khi bạn có thể. Có một số thứ khó chịu, dành riêng cho tiện ích được gọi là bố cục con trong quá trình triển khai hiện tại, cho phép bạn đôi khi chỉ sửa đổi một thành phần duy nhất, thông qua việc định cấu hình một tùy chọn như

Meltdown imminent!
...
64 (chứ không chỉ là
Perl> Tkx::ttk__style_theme_use()
aqua
6, tên của kiểu)

Một số kiểu cũng cung cấp các tùy chọn cấu hình bổ sung cho phép bạn chỉ định phần tử nào mà tùy chọn đó ảnh hưởng. Ví dụ: kiểu

Meltdown imminent!
...
66 cung cấp tùy chọn
ttk::style theme use themename
5 cho phần chính của tiện ích con và tùy chọn
Meltdown imminent!
...
68 cho hộp cho biết liệu nó có được chọn hay không

Các trường hợp bạn có thể làm điều này có được ghi lại không? . Đôi khi, bạn có thể tìm thấy một số tùy chọn của kiểu bằng cách gọi phương thức

Meltdown imminent!
...
69 của kiểu mà không cung cấp bất kỳ tùy chọn cấu hình mới nào. Các trang hướng dẫn tham khảo cho mỗi tiện ích con theo chủ đề thường bao gồm phần tùy chọn kiểu dáng liệt kê các tùy chọn có thể có sẵn để thay đổi

Đây là một lĩnh vực của API widget theo chủ đề tiếp tục phát triển theo thời gian

Khó khăn thứ hai cũng liên quan đến việc sửa đổi các tùy chọn kiểu

Các tùy chọn khả dụng không nhất thiết phải có tác dụng và không phải là lỗi khi sửa đổi một tùy chọn không có thật

Đôi khi, bạn sẽ cố gắng thay đổi một tùy chọn được cho là tồn tại theo các tùy chọn phần tử, nhưng nó sẽ không có hiệu lực. Ví dụ: bạn không thể sửa đổi màu nền của một nút trong chủ đề

>> Tk.tk_call('ttk::style', 'theme', 'use')
=> "aqua"
2 được macOS sử dụng. Mặc dù có những lý do chính đáng cho những trường hợp này, nhưng không dễ để phát hiện ra chúng, điều này đôi khi có thể khiến việc thử nghiệm trở nên khó chịu

Có lẽ khó chịu hơn khi bạn đang thử nghiệm là việc chỉ định tên kiểu

Meltdown imminent!
...
71 hoặc tên tùy chọn không tạo ra lỗi. Khi thực hiện một
Meltdown imminent!
...
69 hoặc
Meltdown imminent!
...
50, bạn có thể cung cấp một tên hoàn toàn tùy ý cho một phong cách hoặc một tùy chọn. Vì vậy, nếu bạn cảm thấy nhàm chán với các tùy chọn
ttk::style theme use themename
5 và
Meltdown imminent!
...
61, vui lòng định cấu hình tùy chọn
Meltdown imminent!
...
76. Nó có thể không làm bất cứ điều gì, nhưng nó không phải là một lỗi. Một lần nữa, điều này có thể khiến bạn khó biết được mình nên sửa đổi điều gì và không nên sửa đổi điều gì

Đây là một trong những nhược điểm của việc có một hệ thống rất nhẹ và năng động. Bạn có thể tạo các kiểu mới bằng cách cung cấp tên của chúng khi định cấu hình các tùy chọn kiểu mà không cần tạo đối tượng kiểu một cách rõ ràng. Đồng thời, điều này tự mở ra lỗi. Cũng không thể tìm ra phong cách nào hiện đang tồn tại hoặc được sử dụng. Và hãy nhớ rằng các tùy chọn kiểu thực sự chỉ là giao diện người dùng cho các tùy chọn phần tử và các phần tử trong một kiểu có thể thay đổi bất kỳ lúc nào. Không rõ ràng rằng các tùy chọn nên được giới hạn ở những tùy chọn chỉ được đề cập bởi các yếu tố hiện tại, bản thân các tùy chọn này có thể không phải là nội quan

Cuối cùng, đây là điều cuối cùng làm cho phong cách và chủ đề trở nên khó khăn

Các thành phần có sẵn, tên của các thành phần đó, tùy chọn nào có sẵn hoặc ảnh hưởng đến từng thành phần đó và được sử dụng cho một tiện ích con cụ thể có thể khác nhau trong mỗi chủ đề

Vì thế? . Một số ý nghĩa của điều này

  1. Nếu bạn muốn xác định một loại tiện ích con mới (hoặc một biến thể của tiện ích con hiện có) cho ứng dụng của mình, bạn sẽ cần thực hiện việc này một cách riêng biệt và khác biệt cho từng chủ đề mà ứng dụng của bạn sử dụng (ví dụ:. e. , ít nhất ba đối với ứng dụng đa nền tảng)
  2. Vì các yếu tố và tùy chọn khả dụng có thể khác nhau đối với từng chủ đề/nền tảng, nên bạn có thể cần một phương pháp tùy chỉnh hoàn toàn khác cho từng chủ đề/nền tảng
  3. Các thành phần, tên và tùy chọn thành phần có sẵn với mỗi chủ đề thường không được ghi lại (ngoài việc đọc các tệp định nghĩa chủ đề) nhưng thường được xác định thông qua nội quan chủ đề (chúng ta sẽ sớm thấy). Bởi vì tất cả các chủ đề không có sẵn trên tất cả các nền tảng (e. g. ,
    >> Tk.tk_call('ttk::style', 'theme', 'use')
    => "aqua"
    2 chỉ khả dụng trên macOS), bạn sẽ cần quyền truy cập sẵn sàng vào mọi nền tảng và chủ đề mà bạn cần để chạy trên đó

Cân nhắc thử tùy chỉnh một nút. Bạn biết nó sử dụng phong cách

Perl> Tkx::ttk__style_theme_use()
aqua
6. Nhưng phong cách đó được triển khai bằng một chủ đề khác nhau trên mỗi nền tảng. Nếu bạn kiểm tra bố cục của phong cách đó trong mỗi chủ đề, bạn sẽ phát hiện ra rằng mỗi chủ đề sử dụng các yếu tố khác nhau được sắp xếp khác nhau. Nếu bạn cố gắng tìm các tùy chọn được quảng cáo có sẵn cho từng thành phần, bạn sẽ thấy các tùy chọn đó cũng khác nhau. Và tất nhiên, ngay cả khi một tùy chọn có sẵn trên danh nghĩa, nó có thể không có tác dụng)

Điểm mấu chốt là trong Tk cổ điển, nơi bạn có thể sửa đổi bất kỳ tập hợp lớn các thuộc tính nào cho một tiện ích con riêng lẻ, bạn có thể làm điều gì đó trên một nền tảng và nó sẽ hoạt động tốt (nhưng có lẽ cần điều chỉnh) . Trong chủ đề Đến, tùy chọn dễ dàng không có ở đó và bạn buộc phải thực hiện đúng cách nếu muốn ứng dụng của mình hoạt động với nhiều chủ đề/nền tảng. Đó là công việc trả trước nhiều hơn

Trình độ cao. Thông tin thêm về các yếu tố

Mặc dù đó là phần chúng tôi sẽ đề cập đến các phong cách và chủ đề trong hướng dẫn này, nhưng đối với những người dùng tò mò và những người muốn tìm hiểu sâu hơn về việc tạo các chủ đề mới, chúng tôi có thể cung cấp một số mẩu tin thú vị hơn về các yếu tố

Bởi vì các yếu tố là khối xây dựng của các phong cách và chủ đề, nó đặt ra câu hỏi "các yếu tố đến từ đâu?"

Ở mức thấp nhất, các phần tử đến từ một thứ gọi là nhà máy phần tử. Hiện tại, có một cái mặc định, mà hầu hết các chủ đề sử dụng và sử dụng các thói quen vẽ Tk để tạo các phần tử. Thứ hai cho phép bạn tạo các phần tử từ hình ảnh và có thể truy cập được ở cấp độ tập lệnh bằng phương pháp

Meltdown imminent!
...
79 (từ Tcl). Bất kỳ định dạng hình ảnh nào được Tk hỗ trợ đều có sẵn, bao gồm các định dạng hình ảnh có thể mở rộng như SVG, nếu bạn có phần mở rộng phù hợp. Cuối cùng, có một công cụ thứ ba, dành riêng cho Windows sử dụng API nền tảng "Kiểu trực quan" cơ bản

Nếu một chủ đề sử dụng các phần tử được tạo thông qua các tiện ích gốc của nền tảng, thì lệnh gọi sử dụng các tiện ích gốc đó thường sẽ xuất hiện trong mã đặc tả phần tử của chủ đề đó. Tất nhiên, các chủ đề có thành phần phụ thuộc vào tiện ích con gốc hoặc lệnh gọi API chỉ có thể chạy trên nền tảng hỗ trợ chúng

Sau đó, các chủ đề sẽ lấy một tập hợp các phần tử và sử dụng các phần tử đó để tập hợp các kiểu mà các tiện ích thực sự sử dụng. Và với toàn bộ ý tưởng về chủ đề là một số phong cách có thể có cùng diện mạo, không có gì ngạc nhiên khi các phong cách khác nhau có chung các yếu tố

Vì vậy, trong khi kiểu

Perl> Tkx::ttk__style_theme_use()
aqua
6 bao gồm phần tử
Meltdown imminent!
...
81 và kiểu
Meltdown imminent!
...
05 bao gồm phần tử
Meltdown imminent!
...
83, bên dưới, các phần tử đệm này nhiều khả năng là một và giống nhau. Chúng có thể xuất hiện khác nhau, nhưng đó là do các tùy chọn cấu hình khác nhau, như chúng tôi nhớ lại, được lưu trữ theo kiểu sử dụng phần tử

Cũng có thể không ngạc nhiên khi phát hiện ra rằng một chủ đề có thể cung cấp một tập hợp các tùy chọn phổ biến được sử dụng làm mặc định cho từng kiểu nếu kiểu đó không chỉ định chúng theo cách khác. Điều này có nghĩa là nếu hầu hết mọi thứ trong toàn bộ chủ đề đều có nền màu xanh lá cây, thì chủ đề đó không cần phải nói rõ điều này cho từng kiểu. Điều này sử dụng một kiểu gốc có tên là

Meltdown imminent!
...
84. Nếu
Meltdown imminent!
...
12 có thể thừa kế từ
Perl> Tkx::ttk__style_theme_use()
aqua
6, thì tại sao
Perl> Tkx::ttk__style_theme_use()
aqua
6 không thể thừa kế từ
Meltdown imminent!
...
84?

Cuối cùng, bạn nên xem cách các chủ đề hiện có được xác định, cả ở cấp độ mã C trong thư viện C của Tk và thông qua các tập lệnh Tk được tìm thấy trong thư mục "library/ttk" của Tk hoặc trong các chủ đề của bên thứ ba. Tìm kiếm

Meltdown imminent!
...
89 trong thư viện C của Tk để xem các phần tử được chỉ định như thế nào

Bạn có thể sử dụng CSS với Python Tkinter không?

Tôi không biết cách sử dụng CSS trong Tkinter. Xin vui lòng cho tôi nếu nó là có thể. Không, không có cách nào để làm điều đó với tkinter .

Chúng tôi có thể sử dụng HTML và CSS trong Tkinter không?

TkinterWeb cung cấp các liên kết cho tiện ích Tkhtml3 từ http. //tkhtml. tcl. tk/tkhtml. html, cho phép tải mã HTML và CSS vào ứng dụng Tkinter . Tất cả các hệ điều hành chính chạy Python 2. 7+ hoặc Python 3+ được hỗ trợ.

Làm cách nào để áp dụng CSS cho Python?

Danh sách kiểm tra học tập CSS . Sử dụng lệnh python -m SimpleHTTPServer để phân phát . Tạo phần tử trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần trong phần

Tkinter có còn được sử dụng vào năm 2022 không?

Không có hỗ trợ tích hợp cho GUI được điều khiển từ nguồn dữ liệu, cơ sở dữ liệu hoặc để hiển thị hoặc thao tác đa phương tiện hoặc phần cứng. Tuy nhiên, nếu bạn cần tạo thứ gì đó đơn giản mà không yêu cầu bất kỳ phụ thuộc bổ sung nào, thì Tkinter có thể là thứ bạn đang tìm kiếm .