dài quá phát âm không nổi
Tkinter là tiêu chuẩn chỉnh của Python để tạo GUI và được bao hàm trong thư viện tiêu chuẩn chỉnh Python. Gợi ý này hướng dẫn kiến tạo một áp dụng GUI dễ dàng và đơn giản để giải thích các định nghĩa Tkinter cơ bản, bao gồm cách sắp xếp các thành phần GUI, thu thập dữ liệu nguồn vào của người dùng và links các phần tử GUI với những phương thức điện thoại tư vấn lại.Bạn đang xem: Thư viện tkinter là gì
Giới thiệu
chắc rằng bạn mới bước đầu học Python cùng đã xây dựng một hoặc hai ứng dụng solo giản. Xin chúc mừng! Nhưng, hiện nay thì sao? Chà, còn về bài toán xây dựng giao diện người dùng đồ họa ("GUI") để liên hệ với ứng dụng Python mới, sáng bóng của khách hàng thì sao?
Có một trong những tùy lựa chọn để xây dựng những ứng dụng GUI với Python, bao hàm Py
Qt với wx
Python . Tuy nhiên, hướng dẫn này đã giới thiệu cho bạn về Tkinter .
Tkinter , viết tắt của "Tk interface", là tiêu chuẩn của Python để xây dừng GUI và được bao gồm trong Thư viện tiêu chuẩn Python . Nó là 1 ràng buộc cùng với bộ quy định Tk GUI , một tủ sách mã nguồn mở miễn giá thành của các một thể ích GUI hoàn toàn có thể được thực hiện để xây dựng hình ảnh đồ họa bởi nhiều ngữ điệu lập trình.
lí giải này trình diễn về xây cất của một ứng dụng GUI cơ bản hiển thị giờ địa phương trong múi tiếng do người tiêu dùng chọn. Công việc xây dựng ứng dụng từ từ và tế bào tả một số khái niệm chính khi thao tác với Tkinter , bao hàm cách sắp xếp các thành phần GUI, tích lũy thông tin đầu vào của người tiêu dùng và link các thành phần GUI với những phương thức hotline lại.
Điều khiếu nại tiên quyết
Để hoàn thành hướng dẫn này, bạn sẽ cần yêu cầu có:
pip mua đặt. Đã thiết lập thư viện múi giờ pytz . Thư viện hoàn toàn có thể được thiết lập bằng pip .
pip install pytz
giải đáp này sẽ sử dụng thuật ngữ cửa sổ gốc và cửa sổ chính thay thế cho nhau.
bước 1 - chế tạo ra một áp dụng Python new và đặt những mục nhập bắt buộc
chế tạo ra một áp dụng Python mới mang tên timezone.py và thêm những câu lệnh import sau để nhập những mô-đun Tkinter , datetime và pytz .
import tkinter as tk import datetime import pytz
bước 2 - Thêm múi giờ
gợi ý này kết hợp bộ múi giờ đồng hồ của Hoa Kỳ là một trong những phần nhỏ của múi giờ đồng hồ được pytz hỗ trợ. Tính năng của ứng dụng rất có thể được mở rộng bằng phương pháp thêm các tên múi giờ đồng hồ pytz vấp ngã sung. Rất có thể xuất danh sách không thiếu các múi giờ tất cả sẵn cùng với pytz bằng cách chạy lệnh sau:
print(pytz.all_timezones)
cỗ múi tiếng của Hoa Kỳ bao gồm sẵn qua pytz được chỉ định dưới dạng danh sách.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa">
bước 3 - sản xuất một phiên phiên bản của Lớp Tk
Khởi tạo ra lớp Tk tạo nên một cửa sổ gốc vẫn đóng mục đích là hành lang cửa số chính của GUI của áp dụng múi giờ.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk()
bước 4 - tùy chỉnh cửa sổ chính
bước này định cấu hình cửa sổ gốc, nhất là tiêu đề, hình học và khả năng đổi khác kích thước của nó.
bước 4a - Đặt tiêu đề hành lang cửa số chính
Tiêu đề hành lang cửa số được để bằng phương pháp title .
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application")
cách 4b - Đặt Chiều rộng lớn và chiều cao của cửa sổ Chính
quý hiếm chiều rộng và độ cao của cửa ngõ sổ, được biểu thị bằng pixel, hoàn toàn có thể được gán cho các biến để gia công cho mã dễ dàng theo dõi hơn.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175
bước 4c - đo lường và tính toán Vị trí Trung tâm hành lang cửa số Chính
cửa sổ chính hoàn toàn có thể được để ở bất kỳ vị trí nào trên màn hình, ví như ở giữa, ở góc cạnh trên bên trái, v.v. Cửa sổ căn giữa cung ứng "giao diện" bắt mắt và địa chỉ trung trung ương của hành lang cửa số chính rất có thể được xác định bằng cách sử dụng winfo_screenwidth() của hành lang cửa số gốc. Winfo_screenwidth() và các phương thức winfo_screenheight() thuộc với một vài phép toán solo giản. Hai cách làm này trả về chiều rộng màn hình và chiều cao screen được thực hiện để đo lường và tính toán tọa độ (x, y) phù hợp để căn giữa hành lang cửa số chính. Như với chiều rộng và chiều cao của cửa ngõ sổ, các giá trị vị trí trung trung khu cũng hoàn toàn có thể được gán cho các biến để triển khai cho mã đọc dễ dàng hơn.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2)
chú ý rằng cực hiếm center_x và center_y cũng được biểu thị bằng px và int được sử dụng để đảm bảo an toàn cả hai cực hiếm được đo lường đều là số nguyên.
Bước 4 chiều - tùy chỉnh Hình học hành lang cửa số Chính
Hình học cửa sổ root , chỉ định kích cỡ và địa chỉ của cửa sổ chính, được thiết lập cấu hình bằng phương pháp geometry của hành lang cửa số gốc. Để tạo cho mọi lắp thêm trở nên đơn giản, chúng ta có thể sử dụng một chuỗi ký kết tự sting được định dạng, hoặc chuỗi f , đã nội suy các biểu thức đổi thay hình học tập trong thời hạn chạy. Theo khối mã sau, chuỗi cam kết tự f được chuyển đến cách làm geometry bên dưới dạng tham số.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"window_widthxwindow_height+center_x+center_y")
bước 4e - Đặt khả năng biến đổi kích thước hành lang cửa số chính
Khả năng biến đổi kích thước của hành lang cửa số gốc dọc theo trục x cùng y của nó có thể được để thông qua phương pháp resizable của hành lang cửa số gốc. Cách làm resizable gật đầu đồng ý các thông số height với width , theo thiết bị tự đó. Cực hiếm True hoặc không giống 0 cho một trong các hai tham số hướng dẫn và chỉ định rằng hành lang cửa số chính tất cả thể biến hóa kích thước dọc theo trục được liên kết. Quý giá False hoặc 0 cho một trong hai tham số chỉ định rằng hành lang cửa số chính không thể chuyển đổi kích thước dọc theo trục sẽ cho. Ứng dụng hứa giờ sẽ sử dụng giá trị False cho cả chiều cao với chiều rộng nhằm ngăn hành lang cửa số chính bị chuyển đổi kích thước.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"window_widthxwindow_height+center_x+center_y") root.resizable(False, False)
cách 5 - hướng dẫn và chỉ định lưới cho bố cục tổng quan tiện ích con
các widget có thể được thu xếp trên đầu hành lang cửa số chính theo vô số cách thức khác nhau bằng phương pháp sử dụng trình thống trị hình học . Nói chung, các widget có thể được thu xếp theo 3 cách:
Được đóng góp gói bởi phương thức pack() . Trình thống trị hình học tập pack() sắp đến xếp những widget thành các khối trước lúc chúng đạt thêm vào hành lang cửa số gốc hoặc widget cha. Một phương pháp không hoàn hảo nhưng có lẽ rằng hữu ích nhằm nghĩ về bài toán đóng gói là nghĩ về về việc thêm các món đồ tạp hóa vào một trong những túi mặt hàng tạp hóa. Những mục không độc nhất vô nhị thiết cần được thêm vào những vị trí được khẳng định trước vào túi. Cầm cố vào đó, chúng được đóng gói lần lượt, thực hiện hết không khí có sẵn cho đến khi toàn bộ các món đồ đã được bỏ vô túi. Trình cai quản hình học pack() chuyển động theo cách tương tự.
Được đặt bởi phương thức place() . Trình làm chủ hình học tập place() đặt những tiện ích bé vào những vị trí núm thể, được xác minh trước trong cửa sổ gốc hoặc tiện ích con. Trình quản lý hình học tập này cụ thể là bổ ích khi xây dựng bố cục tổng quan GUI chủ yếu xác.
Được sắp xếp dưới dạng lưới bằng cách sử dụng phương thức grid() . Lưới là bảng sản phẩm / cột 2 chiều. Phầm mềm con được chế tạo lưới bằng cách chỉ định hàng cùng cột cụ thể nơi phầm mềm con sẽ tiến hành đặt. Lưới được tùy chỉnh thiết lập bằng cách thức columnconfigure với rowconfigure của hành lang cửa số gốc. Mỗi phương thức này bao gồm một index cùng một ở trong tính weight . Nằm trong tính index xác định trí của cột hoặc hàng bằng cách sử dụng cơ sở bắt đầu là 0 . Trực thuộc tính weight chỉ định form size của một cột hoặc hàng ví dụ so với các cột khác. Ví dụ, ví như cột 0 gồm trọng số 1 và cột 1 gồm trọng số 3 , thì cột 1 sẽ mập gấp 3 lần cột 0 .
Lưới rất tiện dụng khi đặt các phần tử cạnh nhau và bọn chúng tương đối đơn giản dễ dàng để thực hiện. Ứng dụng múi giờ sẽ thực hiện lưới hành lang cửa số chính được phân thành 4 cột bằng nhau.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"window_widthxwindow_height+center_x+center_y") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1)
bước 6 - Thêm luôn tiện ích
Trong cách này, những widget được cung ứng lưới cửa sổ chính được xác định trong bước 4. Ứng dụng múi giờ đồng hồ sẽ áp dụng 3 widget TKinter :
Label Listbox Button
những widget Label và Button của Tkinter đúng như cái tên gọi của chúng. Tiện ích Label cho phép người thiết kế hiển thị văn bản (tức là nhãn), và ứng dụng Button được thực hiện để hiển thị những nút. Listbox ích Hộp list được áp dụng để chọn một giá trị (hoặc những giá trị) từ danh sách các tùy chọn.
tất nhiên, bao gồm widget khác ko kể 3 widget được liệt kê ở trên, ví dụ điển hình như các Spin
Box , Entry cùng Message . Tài liệu về những lệnh Tk chủ yếu thức là một trong tài nguyên có lợi để tham khảo thêm về những tiện ích con gồm sẵn thông qua bộ điều khoản Tk.
cách 6a - Tạo app con
Một phiên phiên bản của từng lớp widget được khiến cho một widget cố định được thực hiện với xây đắp GUI. Ứng dụng múi giờ sử dụng 4 phiên phiên bản tiện ích con: 2 phầm mềm Label , 1 Listbox ích Hộp list và 1 app Button .
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"window_widthxwindow_height+center_x+center_y") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1) # Instance of Label widget class for selection prompt. Select_timezone_label = tk.Label(root, text="Please select a timezone.") # Instance of Listbox class for selection of timezone from list. List_var = tk.Variable(value=timezones) select_timezone_listbox = tk.Listbox(root, listvariable=list_var, height=1) # Instance of Button class to get the local time in the selected timezone. Select_timezone_button = tk.Button(root, text="Get Time") # Second instance of the Label class to display the local time in the selected timezone. Time_label = tk.Label(root, text="")
Như sẽ thấy trong khối mã sống trên, mỗi thành viên widget được "đính kèm" vào hành lang cửa số root . ứng dụng Listbox cũng yêu mong khởi sinh sản lớp Tkinter Variable() đặc trưng được thực hiện để cung cấp cho widget danh sách những tùy lựa chọn múi tiếng mà người dùng có thể chọn trải qua thuộc tính listvariable Listbox . Văn bạn dạng được hiển thị vày mỗi app Label rất có thể được định cấu hình bằng phương pháp sử dụng trực thuộc tính text . Cực hiếm văn bạn dạng cho time_label được để trống vày nó sẽ được đặt hễ mỗi khi người tiêu dùng "lấy" thời hạn cho một múi giờ sẽ chọn.
bước 6b - Đặt Widget trên Lưới
các cá thể widget được sinh sản ở cách 5a hoàn toàn có thể được bỏ lên trên lưới được xác định trong bước 4 bằng cách sử dụng thủ tục grid() . Ứng dụng múi giờ đang sử dụng các thuộc tính thủ tục grid() sau để khẳng định bố cục:
column : chỉ định cột cụ thể nơi app con sẽ được đặt bằng phương pháp sử dụng cơ sở 0 .
row : hướng dẫn và chỉ định hàng rõ ràng nơi app con sẽ tiến hành đặt bằng phương pháp sử dụng đại lý 0 .
columnspan : hướng đẫn rằng widget sẽ kéo dãn dài số cột được chỉ định. Ví dụ: một phầm mềm con có mức giá trị cột columnspan=3 sẽ kéo dãn 3 cột trong cả khi chính app con đó bé dại hơn 3 cột.
sticky : hành động mặc định của Tkinter là đặt phầm mềm con ở trung tâm ngang và dọc của ô (tức là địa chỉ hàng / cột rứa thể) nơi nó được đặt. Hành vi mặc định này rất có thể được ghi đè bằng phương pháp sử dụng sticky tính thắt chặt và cố định sử dụng những giá trị y hệt như la bàn, bao gồm NW , N , NE , W , E , SW , S với SE , để chỉnh sửa tiện ích trên một vị trí cụ thể trong ô của tiện ích. Ví dụ: sticky=t
K.W chỉ định rằng ứng dụng con đề nghị được căn chỉnh về góc phía tây của ô lưới của nó. Tương tự, sticky=t
K.E chỉ định rằng ứng dụng con buộc phải được chỉnh sửa theo góc phía đông của ô lưới của nó.
Xem thêm: " cặp sách đọc la gì ? phép dịch cặp sách thành tiếng anh
padx , pady : thuộc tính padx cùng pady được sử dụng để thêm đệm trục x và trục y khớp ứng với những giá trị được chỉ định bởi pixel. Đương nhiên, padding có thể cung cấp một GUI trông chuyên nghiệp hơn, đảm bảo rằng các widget ko "va chạm" thẳng vào các cạnh của hành lang cửa số gốc hoặc các widget khác.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"window_widthxwindow_height+center_x+center_y") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1) # Instance of Label widget class for selection prompt. Select_timezone_label = tk.Label(root, text="Please select a timezone.") # Instance of Listbox class for selection of timezone from list. List_var = tk.Variable(value=timezones) select_timezone_listbox = tk.Listbox(root, listvariable=list_var, height=1) # Instance of Button class to get the local time in the selected timezone. Select_timezone_button = tk.Button(root, text="Get Time") # Second instance of the Label class lớn display the local time in the selected timezone. Time_label = tk.Label(root, text="") # Place widgets on grid. Select_timezone_label.grid(column=0, row=0, columnspan=4, sticky=tk.W, padx=10, pady=10) select_timezone_listbox.grid(column=0, row=1, columnspan=3, sticky=tk.EW, padx=10, pady=10) select_timezone_button.grid(column=4, row=1, sticky=tk.E, padx=10, pady=10) time_label.grid(column=0, row=4, columnspan=4, sticky=tk.W, padx=10, pady=10)
cách 7 - Tạo cách thức gọi lại nút mang thời gian
phương thức gọi lại phải được khẳng định để xử lý các sự kiện khi người dùng nhấp vào nút select_timezone_button được tạo thành ở bước 5.
cách 7a - buộc ràng nút mang thời gian
Trước khi xác định logic call lại, điều có lợi là thứ nhất liên kết nút cùng với tên cách tiến hành mà ở đầu cuối sẽ bao gồm mã call lại. Phương thức bind() có thể được thực hiện cùng với cùng 1 hàm lambda để liên kết select_timezone_button với cách tiến hành gọi lại được chỉ định. Ko kể ra, hãy chú ý rằng hàm lambda được thực hiện để chuyển các tham chiếu đến các widget select_timezone_listbox cùng time_label bên dưới dạng các tham số điện thoại tư vấn lại. Các thông số kỹ thuật gọi lại này thực thụ không cần thiết vì select_timezone_listbox và time_label đều phía trong phạm vi chung. Mặc dù nhiên, nó được cho là hữu ích để chứng minh cách các đối số rất có thể được truyền đến hàm call lại.
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"window_widthxwindow_height+center_x+center_y") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1) # Instance of Label widget class for selection prompt. Select_timezone_label = tk.Label(root, text="Please select a timezone.") # Instance of Listbox class for selection of timezone from list. List_var = tk.Variable(value=timezones) select_timezone_listbox = tk.Listbox(root, listvariable=list_var, height=1) # Instance of Button class lớn get the local time in the selected timezone. Select_timezone_button = tk.Button(root, text="Get Time") # Second instance of the Label class to lớn display the local time in the selected timezone. Time_label = tk.Label(root, text="") # Place widgets on grid. Select_timezone_label.grid(column=0, row=0, columnspan=4, sticky=tk.W, padx=10, pady=10) select_timezone_listbox.grid(column=0, row=1, columnspan=3, sticky=tk.EW, padx=10, pady=10) select_timezone_button.grid(column=4, row=1, sticky=tk.E, padx=10, pady=10) time_label.grid(column=0, row=4, columnspan=4, sticky=tk.W, padx=10, pady=10) select_timezone_button.bind("", lambda e, args= bước 7b - xác minh Logic gọi lại
súc tích gọi lại nhằm xử lý những sự khiếu nại nhấp vào nút được định nghĩa mặt dưới.
def get_timezone_time(e, args): select_timezone_listbox = args<0> time_label = args<1> selection_index = select_timezone_listbox.curselection() selected_timezone = select_timezone_listbox.get(selection_index) now_time = datetime.datetime.now() tz_time = now_time.astimezone(pytz.timezone(selected_timezone)) tz_formatted = tz_time.strftime("%H:%M:%S") time_label.configure("text": f"The time in selected_timezone is tz_formatted.") time_label.update()
những curselection() cùng get() được thực hiện để truy hỏi xuất múi giờ đồng hồ đã lựa chọn của người tiêu dùng từ tham chiếu đến ứng dụng con select_timezone_listbox . Thời hạn hiện trên của fan dùng tiếp nối được đổi khác thành múi giờ đã chọn. Cuối cùng, phương thức configure được thực hiện để đổi khác thuộc tính text của tham chiếu mang lại nhãn thời time_label với giờ địa phương vào múi giờ đang chọn. Chú ý rằng thủ tục update() được thực hiện để "buộc" ứng dụng time_label tự cập nhật giá trị văn bản mới.
cách 8 - chấm dứt và chạy ứng dụng
phương thức mainloop() của hành lang cửa số gốc được vận dụng làm dòng mã cuối cùng. Cách thức mainloop() đã chạy GUI vào một vòng lặp vô hạn cho đến khi người tiêu dùng thoát.
Mã dứt như sau:
import tkinter as tk import datetime import pytz timezones = <"US/Alaska", "US/Aleutian", "US/Arizona", "US/Central", "US/East-Indiana", "US/Eastern", "US/Hawaii", "US/Indiana-Starke", "US/Michigan", "US/Mountain", "US/Pacific", "US/Samoa"> def get_timezone_time(e, args): select_timezone_listbox = args<0> time_label = args<1> selection_index = select_timezone_listbox.curselection() selected_timezone = select_timezone_listbox.get(selection_index) now_time = datetime.datetime.now() tz_time = now_time.astimezone(pytz.timezone(selected_timezone)) tz_formatted = tz_time.strftime("%H:%M:%S") time_label.configure("text": f"The time in selected_timezone is tz_formatted.") time_label.update() root = tk.Tk() root.title("Simple Timezone Application") window_width = 450 window_height = 175 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() center_x = int((screen_width - window_width)/2) center_y = int((screen_height - window_height)/2) root.geometry(f"window_widthxwindow_height+center_x+center_y") root.resizable(False, False) root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) root.columnconfigure(2, weight=1) root.columnconfigure(3, weight=1) # Instance of Label widget class for selection prompt. Select_timezone_label = tk.Label(root, text="Please select a timezone.") # Instance of Listbox class for selection of timezone from list. List_var = tk.Variable(value=timezones) select_timezone_listbox = tk.Listbox(root, listvariable=list_var, height=1) # Instance of Button class to lớn get the local time in the selected timezone. Select_timezone_button = tk.Button(root, text="Get Time") # Second instance of the Label class lớn display the local time in the selected timezone. Time_label = tk.Label(root, text="") # Place widgets on grid. Select_timezone_label.grid(column=0, row=0, columnspan=4, sticky=tk.W, padx=10, pady=10) select_timezone_listbox.grid(column=0, row=1, columnspan=3, sticky=tk.EW, padx=10, pady=10) select_timezone_button.grid(column=4, row=1, sticky=tk.E, padx=10, pady=10) time_label.grid(column=0, row=4, columnspan=4, sticky=tk.W, padx=10, pady=10) # Bind button to callback. Select_timezone_button.bind("", lambda e, args=
Khi vận dụng được khởi chạy, GUI sẽ giống như sau:
Để sử dụng ứng dụng, hãy nhấp vào hộp list và sử dụng các phím nhỏ trỏ lên / xuống của bàn phím để cuộn qua các tùy lựa chọn múi giờ. Nhấp vào nút Lấy thời gian để hiển thị thời gian hiện trên trong múi giờ đồng hồ đã lựa chọn của bạn.
cách tiếp theo
Chúc mừng bạn đã xây dựng áp dụng GUI Python đầu tiên của bản thân mình với Tkinter ! Như sẽ đề cập trong phần Giới thiệu, trả lời này được thiết kế với để giới thiệu cho mình một vài quan niệm cơ bản. Tài liệu Thư viện tiêu chuẩn chỉnh Python và tài liệu tham khảo tài liệu lệnh Tk được nhắc trước chính là hai tài nguyên xuất xắc vời để giúp đỡ bạn mày mò về những tính năng và công dụng Tkinter nâng cấp hơn.
những ứng dụng Tkinter GUI thỉnh thoảng bị chỉ trích là có giao diện không giống gốc. Điều đó hoàn toàn có thể đúng. Nhưng các widget của bộ công cụ bao gồm khả năng cấu hình cao và những ứng dụng Tkinter GUI hoàn toàn có thể được phát hành tương đối lập cập mà không cần phải cài đặt bất kỳ gói Python bên phía ngoài nào.
ngoại trừ tài liệu chính thức, tất cả vô số hướng dẫn tất cả sẵn trên internet để tìm hiểu về biện pháp xây dựng các ứng dụng GUI tinh vi hơn cùng với Tkinter.
Python cung ứng các tùy chọn khác biệt để cách tân và phát triển giao diện người dùng đồ họa (GUI). đặc biệt nhất được liệt kê bên dưới đây.
Tkinter: Tkinter là giao diện Python đến bộ pháp luật Tk GUI. Chúng ta sẽ học Tkinter trong chương này.lập trình sẵn Tkinter vào Python
Tkinter là thư viện GUI tiêu chuẩn chỉnh cho Python. Tkinter vào Python hỗ trợ một cách lập cập và thuận lợi để tạo các ứng dụng GUI. Tkinter cung ứng giao diện hướng đối tượng cho bộ phương tiện Tk GUI.
dưới đây là các bước để chế tác một vận dụng Tkinter:
import Tkinter module. Tạo cửa sổ chính của ứng dụng GUI. thêm một hoặc các widget nói bên trên vào áp dụng GUI. gọi vòng lặp sự kiện chính để những hành động hoàn toàn có thể diễn ra trên màn hình máy tính xách tay của người dùng.Ví dụ:
# import Tkinter modulefrom tkinter import *# Tạo hành lang cửa số chính của áp dụng GUItop = Tk()# call vòng lặp sự kiện thiết yếu để những hành động hoàn toàn có thể diễn ra trên màn hình máy vi tính của tín đồ dùngtop.mainloop()
Kết quả:
các Widget của Tkinter vào Python
có rất nhiều widget khác biệt như button, canvas, checkbutton, entry, ... Chúng được áp dụng để xây dụng các ứng dụng GUI trong Python.
1 | Button | Button được sử dụng để thêm các nút không giống nhau vào vận dụng python. |
2 | Canvas | Canvas được sử dụng để vẽ những hình trên cửa ngõ sổ. |
3 | Checkbutton | Checkbutton được sử dụng để hiển thị Check Button trên cửa sổ. |
4 | Entry | Entry được thực hiện để hiển thị trường văn bạn dạng một dòng cho người dùng. Nó thường xuyên được thực hiện để nhập các giá trị của fan dùng. |
5 | Frame | Frame có thể được định nghĩa là một trong vùng chứa mà có thể chứa một hoặc các widget khác. |
6 | Label | Label là một trong những văn bản được thực hiện để hiển thị một số trong những thông báo hoặc thông tin cho các widget khác. |
7 | List Box | List Box được sử dụng để hiển thị danh sách những tùy chọn cho tất cả những người dùng. |
8 | Menubutton | Menubutton được áp dụng để hiển thị các mục menu cho người dùng. |
9 | Menu | Menu được thực hiện để thêm những mục menu cho tất cả những người dùng. |
10 | Message | Message được áp dụng để hiển thị hộp tin nhắn cho tất cả những người dùng. |
11 | Radiobutton | Người cần sử dụng được hỗ trợ các tùy chọn không giống nhau và người dùng chỉ bao gồm thể lựa chọn 1 tùy chọn trong các đó. |
12 | Scale | Nó được áp dụng để hỗ trợ thanh trượt cho tất cả những người dùng. |
13 | Scrollbar | Nó cung cấp thanh cuộn cho tất cả những người dùng để người dùng có thể cuộn cửa sổ lên cùng xuống. |
14 | Text | Nó khác với Entry vị nó hỗ trợ một ngôi trường văn phiên bản nhiều dòng cho những người dùng để bạn dùng hoàn toàn có thể viết văn phiên bản và sửa đổi văn phiên bản bên vào nó. |
15 | Toplevel | Nó được áp dụng để sinh sản một vùng chứa cửa sổ riêng biệt. |
16 | Spinbox | Nó là một trong những widget mục nhập được thực hiện để lựa chọn từ những tùy chọn của những giá trị. |
17 | Paned Window | Nó giống hệt như một widget container chứa các ô ngang hoặc dọc. |
18 | Label Frame | Label Frame là 1 trong widget vùng chứa hoạt động như một container. |
18 | Message Box | Nó được áp dụng để hiển thị hộp thông báo trong những ứng dụng desktop. |
bố cục trong Python Tkinter
Python Tkinter hỗ trợ các phương thức để bố cục những widget sau.
cách tiến hành pack() thủ tục grid() cách làm place() thủ tục pack() trong Python Tkinterthủ tục pack() được áp dụng để tổ chức triển khai widget theo khối. Vị trí các widget được thêm vào ứng dụng python bằng phương thức pack() có thể được kiểm soát bằng cách sử dụng các tùy chọn khác biệt được chỉ định và hướng dẫn trong lệnh call phương thức.
Cú pháp:
các tùy chọn (options): expand : trường hợp expand là true thì phầm mềm con sẽ không ngừng mở rộng để tủ đầy khoảng trống. Fill : xác định xem widget con gồm lấp đầy bất kỳ không gian quá nào bởi trình đóng gói phân chia cho nó hay là không hoặc duy trì các form size tối thiểu của riêng rẽ nó: NONE(mặc định), X (chỉ điền theo hướng ngang), Y (chỉ điền theo hướng dọc) hay BOTH (điền theo cả chiều ngang và theo hướng dọc ). side : Nó giúp xác định vị trí của widget đối với widget cha.
Ví dụ:
from tkinter import *parent = Tk()redbutton = Button(parent, text = "Red", fg = "red")redbutton.pack(side = LEFT)greenbutton = Button(parent, text = "Black", fg = "black")greenbutton.pack(side = RIGHT)bluebutton = Button(parent, text = "Blue", fg = "blue")bluebutton.pack(side = TOP)blackbutton = Button(parent, text = "Green", fg = "green")blackbutton.pack(side = BOTTOM)parent.mainloop()
Kết quả:
Trình thống trị layout grid() sắp đến xếp những widget sinh sống dạng bảng. Chúng ta cũng có thể chỉ định các hàng với cột. Bọn họ cũng rất có thể chỉ định khoảng cột (chiều rộng) hoặc chiều lâu năm hàng (chiều cao) của widget con.
Đây là một trong cách có tổ chức triển khai hơn nhằm đặt các widget vào ứng dụng python. Cú pháp để sử dụng phương thức grid() được chỉ dẫn dưới đây.
Dưới đây là danh sách tùy lựa chọn của phương thức grid(): Column: Số cột mà lại widget con sẽ được đặt. Cột không tính cùng phía trái được thể hiện bằng 0. Columnspan: Chiều rộng lớn của widget con. Nó đại diện cho số cột mà mang lại đó, cột được mở rộng. ipadx, ipady: Nó thay mặt cho số lượng pixel cho con đường viền của gidget. padx, pady: Nó thay mặt cho số lượng pixel bên phía ngoài đường viền của gidget. row: Số hàng mà widget con sẽ tiến hành đặt. Sản phẩm trên thuộc được biểu hiện bằng 0. rowspan: độ cao của widget con, có nghĩa là số mặt hàng mà ứng dụng con được mở rộng. Sticky: nếu như ô to hơn một widget, thì Sticky được sử dụng để chỉ xác định trí của widget bên phía trong ô. Nó rất có thể là sự ghép nối của những chữ cái sticky đại diện cho vị trí của widget. Nó rất có thể là N, E, W, S, NE, NW, NS, EW, ES.
Ví du:
from tkinter import *parent = Tk()name = Label(parent, text = "Name").grid(row = 0, column = 0)e1 = Entry(parent).grid(row = 0, column = 1)password = Label(parent, text = "Password").grid(row = 1, column = 0)e2 = Entry(parent).grid(row = 1, column = 1)submit = Button(parent, text = "Submit").grid(row = 4, column = 0)parent.mainloop()
Kết quả:
Trình thống trị layout place() sắp đến xếp những widget theo các tọa độ x với y.
Cú pháp:
Dưới đây là danh sách những tùy chọn: Anchor: Nó diễn đạt vị trí đúng mực của widget con trong container. Cực hiếm mặc định là NW (góc trên bên trái). bordermode: giá trị mặc định của kiểu con đường viền là INSIDE đề cập tới sự việc bỏ qua quý hiếm gốc bên trong đường viền. Tùy chọn còn sót lại là OUTSIDE. height, width: Nó đề cập đến chiều cao và chiều rộng lớn của widget tính bằng pixel. relheight, relwidth: chiều cao và chiều rộng có giá trị trong tầm 0,0 với 1,0. relx, rely: có mức giá trị trong tầm 0,0 và 1,0, là độ lệch theo phía ngang cùng dọc. x, y: Nó đề cập cho độ lệch ngang và dọc theo pixel.
Ví dụ:
from tkinter import *top = Tk()top.geometry("400x250")name = Label(top, text = "Name").place(x = 30, y = 50)email = Label(top, text = "Email").place(x = 30, y = 90)password = Label(top, text = "Password").place(x = 30, y = 130)e1 = Entry(top).place(x = 80, y = 50)e2 = Entry(top).place(x = 80, y = 90)e3 = Entry(top).place(x = 95, y = 130)top.mainloop()
Kết quả:
Python là gì? - trình làng ngôn ngữ lập trình sẵn Python
chương trình Hello World vào Python
Recent Updates Vẽ tam giác Pascal trong Python
Vẽ tam giác Floyd vào Python
Vẽ tam giác hầu như trong Python
Bài tập vòng lặp vào Python
Bài tập cai quản sinh viên vào Python
Bài tập Python có lời giải
Vẽ tam giác vuông cân trong Python
Check số yếu tắc trong Python
Cách cài đặt Python (Thiết lập môi trường)Hướng dẫn xây dựng Python với Eclipse
Hướng dẫn xây dựng Python với Py
Charm Community Edition
Hướng dẫn lập trình Python cùng với Visual Studio Code
Sắp tết 2024 Rồi! - Còn từng nào ngày nữa là mang lại tết 2024?
Viet
Tuts on facebook
học Lập Trình Online Miễn tổn phí - Viet
Tuts.Vn
Danh Sách bài học
học Java | Hibernate | Spring học Excel | Excel VBA học Servlet | JSP | Struts2 học tập C | C++ | C# học tập Python học tập SQL
bài bác Tập Có lời giải
bài bác tập Java bài bác tập C bài tập C++ bài tập C# bài tập Python ví dụ như Excel VBA
thắc mắc Phỏng Vấn
201 thắc mắc phỏng vấn java 25 thắc mắc phỏng vấn servlet 75 câu hỏi phỏng vấn jsp 52 câu hỏi phỏng vấn Hibernate 70 thắc mắc phỏng vấn Spring 57 câu hỏi phỏng vấn SQL
Tuts.Vn all rights reserved. | liên hệ | cơ chế - riêng tứ | sitemap.html | sitemap_index.xml