Valera cbb2b06c3f 4 commit | 7 hónapja | |
---|---|---|
img | 7 hónapja | |
readme.md | 7 hónapja |
Python
import tkinter as tk #импортирую библиотеку и даю другое название
class MainWindow(tk.Tk): #создаю главное окно приложения
def __init__(self):
super().__init__()
self.title("Иванов Валера И-21")
self.geometry("300x250")
self.text_box = tk.Entry(self) #создаю текстовое поле
self.text_box.pack() #размещаю текстовое поле
self.text_block = tk.Label(self, textvariable=tk.StringVar(value=self.text_box.get()), height=30)
self.text_block.pack()
# Привязываю значение текстового поля к переменной textvariable
self.text_box.configure(textvariable=self.text_block.cget("textvariable"))
if __name__ == "__main__":
window = MainWindow()
window.mainloop()
Вот что получилось:
Режимы привязки
import tkinter as tk
class MainWindow(tk.Tk):
def __init__(self):
super().__init__()
self.title("Иванов Валера И-21")
self.geometry("400x300")
self.text_box1 = tk.Entry(self)
self.text_box1.pack()
self.text_box2 = tk.Entry(self)
self.text_box2.pack()
# Привязка значения первого текстового поля ко второму текстовому полю
self.text_box2.configure(textvariable=tk.StringVar(value=self.text_box1.get()))
self.text_box1.configure(textvariable=self.text_box2.cget("textvariable"))
if __name__ == "__main__":
window = MainWindow()
window.mainloop()
Вот что вышло:
Обновление привязки
import tkinter as tk
class MainWindow(tk.Tk):
def __init__(self):
super().__init__()
self.title("Иванов Валера И-21")
self.geometry("400x300")
self.text_box1 = tk.Entry(self)
self.text_box1.pack()
self.text_box2 = tk.Entry(self)
self.text_box2.pack()
# Привязка значения первого текстового поля ко второму текстовому полю
self.text_box2.configure(textvariable=tk.StringVar(value=self.text_box1.get()))
self.text_box1.configure(textvariable=self.text_box2.cget("textvariable"))
# Обновление источника при изменении свойства
self.text_box1.configure(validate="key", validatecommand=lambda *args: self.text_box2.configure(textvariable=tk.StringVar(value=self.text_box1.get())))
if __name__ == "__main__":
window = MainWindow()
window.mainloop()
Вот что получилось:
Source
import tkinter as tk
class Phone:
def __init__(self, title, company, price):
self.title = title
self.company = company
self.price = price
class Company:
def __init__(self, company, price):
self.company = company
self.price = price
class MainWindow(tk.Tk):
def __init__(self):
super().__init__()
self.title("Иванов Валера И-21")
self.geometry("400x300")
# Создание экземпляра класса Phone, Company и добавление его в ресурсы окна
iphone = Phone("iPhone 15", "Apple", 72000)
self.resources = {"iPhone": iphone}
apple = Company("Apple", 100000)
self.resources = {"Apple": apple}
# Создание сетки и размещение виджетов на ней
grid = tk.Frame(self)
grid.pack(fill=tk.BOTH, expand=True)
grid.columnconfigure(1, weight=1)
grid.rowconfigure(0, weight=1)
grid.rowconfigure(1, weight=1)
tk.Label(grid, text="Model:", foreground="white").grid(row=0, column=0, sticky=tk.W)
title_text_block = tk.Label(grid, foreground="white")
title_text_block.grid(row=0, column=1, sticky=tk.W+tk.E)
title_text_block.configure(textvariable=tk.StringVar(value=iphone.title))
tk.Label(grid, text="Price:", foreground="white").grid(row=1, column=0, sticky=tk.W)
price_text_block = tk.Label(grid, foreground="white")
price_text_block.grid(row=1, column=1, sticky=tk.W+tk.E)
price_text_block.configure(textvariable=tk.StringVar(value=iphone.price))
tk.Label(grid, text="Company:", foreground="white").grid(row=2, column=0, sticky=tk.W)
price_text_block = tk.Label(grid, foreground="white")
price_text_block.grid(row=2, column=1, sticky=tk.W+tk.E)
price_text_block.configure(textvariable=tk.StringVar(value=apple.company))
if __name__ == "__main__":
window = MainWindow()
window.mainloop()
Вот что вышло:
RelativeSource
import tkinter as tk
class MainWindow(tk.Tk):
def __init__(self):
super().__init__()
self.title("Иванов Валера И-21")
self.geometry("400x300")
# Создание сетки и текстового поля
grid = tk.Frame(self, background="black")
grid.pack(fill=tk.BOTH, expand=True)
text_box = tk.Entry(grid)
text_box.pack()
# Привязка фона текстового поля к фону сетки
text_box.configure(textvariable=tk.StringVar(value=grid["background"]))
# Обновление источника при изменении фона текстового поля
text_box.configure(validate="key", validatecommand=lambda *args: text_box.configure(background=text_box.get()))
if __name__ == "__main__":
window = MainWindow()
window.mainloop()
Вот что вышло:
DataTime
import tkinter as tk
from datetime import datetime
class DateTimeToDateConverter:
def convert(self, value):
return value.date()
class MainWindow(tk.Tk):
def __init__(self):
super().__init__()
self.title("Иванов Валера И-21")
self.geometry("400x300")
# Создание экземпляра DateTime и добавление его в ресурсы окна
my_date = datetime(2024, 4, 22)
self.resources = {"myDate": my_date}
# Создание конвертера DateTimeToDateConverter и добавление его в ресурсы окна
my_date_converter = DateTimeToDateConverter()
self.resources["myDateConverter"] = my_date_converter
# Создание сетки и размещение виджетов на ней
grid = tk.Frame(self)
grid.pack(fill=tk.BOTH, expand=True)
# Создание меток и привязка их текста к источнику данных с использованием конвертера
tk.Label(grid, textvariable=tk.StringVar(value=my_date)).grid(row=0, column=0, sticky=tk.W)
tk.Label(grid, textvariable=tk.StringVar(value=my_date_converter.convert(my_date))).grid(row=1, column=0, sticky=tk.W)
if __name__ == "__main__":
window = MainWindow()
window.mainloop()
Вот что вышло: