Как сделать поля ввода и кнопки прозрачными при использовании фонового изображения в Tkinter?Python

Программы на Python
Ответить
Anonymous
 Как сделать поля ввода и кнопки прозрачными при использовании фонового изображения в Tkinter?

Сообщение Anonymous »

Я работаю над проектом Tkinter, в котором у меня есть экран входа в систему с фоновым изображением. Я хочу сделать поля ввода «Имя пользователя» и «Пароль» прозрачными, чтобы за ними было видно фоновое изображение. Кроме того, я хотел бы, чтобы кнопки «Войти» и «Регистрация» также имели прозрачный фон, но не влияя на их функциональность.
Я попробовал использовать опцию bg="transparent" для полей ввода и кнопок, но у меня возникла ошибка, поскольку Tkinter напрямую не поддерживает прозрачный фон.
введите здесь описание изображения
Вот код фрагмент моей текущей настройки:

Код: Выделить всё

import tkinter as tk
from tkinter import messagebox
import sqlite3
from PIL import Image, ImageTk  # Pillow modülünü içeri aktar

def setup_database():
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
task TEXT NOT NULL,
completed BOOLEAN NOT NULL DEFAULT 0,
FOREIGN KEY(user_id) REFERENCES users(id)
)
""")
conn.commit()
conn.close()

def login_screen():
def login():
username = username_entry.get()
password = password_entry.get()
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("SELECT id FROM users WHERE username = ? AND password = ?", (username, password))
user = cursor.fetchone()
conn.close()

if user:
messagebox.showinfo("Başarılı", "Hoşgeldiniz Lordum!")
main_screen(user[0])  # Kullanıcı ID'sini ana ekrana gönder
else:
messagebox.showerror("Hata", "Kullanıcı adı veya şifre yanlış!")

def register():
username = username_entry.get()
password = password_entry.get()
if username and password:
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
conn.close()
messagebox.showinfo("Başarılı", "Kayıt başarılı! Giriş yapabilirsiniz.")
else:
messagebox.showerror("Hata", "Kullanıcı adı ve şifre boş olamaz!")

root = tk.Tk()
root.title("Giriş Yap")

width, height = 200, 200
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - width) // 2
y = (screen_height - height) // 2
root.geometry(f"{width}x{height}+{x}+{y}")

background_image = Image.open("loginbackground.png")  # Resmi yükle
background_image = background_image.resize((width, height))
background_photo = ImageTk.PhotoImage(background_image)

background_label = tk.Label(root, image=background_photo)
background_label.place(relwidth=1, relheight=1)

login_frame = tk.Frame(root, bg='white')
login_frame.place(relx=0.5, rely=0.5, anchor="center")

tk.Label(login_frame, text="Kullanıcı Adı:", fg="black", bg="white").pack(pady=5)
username_entry = tk.Entry(login_frame, bd=0, relief="flat", highlightthickness=0)  # Borderless entry
username_entry.pack(pady=5)

tk.Label(login_frame, text="Şifre:", fg="black", bg="white").pack(pady=5)
password_entry = tk.Entry(login_frame, show="*", bd=0, relief="flat", highlightthickness=0)  # Borderless entry
password_entry.pack(pady=5)

tk.Button(login_frame, text="Giriş Yap", command=login, bd=0, relief="flat", bg="#d3d3d3").pack(pady=5)
tk.Button(login_frame, text="Kayıt Ol", command=register, bd=0, relief="flat", bg="#d3d3d3").pack(pady=5)

root.mainloop()

def main_screen(user_id):
def add_task():
task = task_entry.get()
if task:
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO tasks (user_id, task) VALUES (?, ?)", (user_id, task))
conn.commit()
conn.close()
task_entry.delete(0,  tk.END)
load_tasks()
else:
messagebox.showerror("Hata", "Görev boş olamaz!")

def delete_task(task_id):
conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("DELETE FROM tasks WHERE id = ?", (task_id,))
conn.commit()
conn.close()
load_tasks()

def load_tasks():
for widget in task_frame.winfo_children():
widget.destroy()

conn = sqlite3.connect("todo_app.db")
cursor = conn.cursor()
cursor.execute("SELECT id, task FROM tasks WHERE user_id = ?", (user_id,))
tasks = cursor.fetchall()
conn.close()

for task_id, task in tasks:
frame = tk.Frame(task_frame)
frame.pack(fill="x", pady=2)

tk.Label(frame, text=task).pack(side="left", padx=5)
tk.Button(frame, text="Sil", command=lambda tid=task_id: delete_task(tid)).pack(side="right")

root = tk.Tk()
root.title("Yapılacaklar Listesi")

width, height = 800, 600
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - width) // 2
y = (screen_height - height) // 2
root.geometry(f"{width}x{height}+{x}+{y}")

task_entry = tk.Entry(root)
task_entry.pack(pady=5)

tk.Button(root, text="Ekle", command=add_task).pack(pady=5)

task_frame = tk.Frame(root)
task_frame.pack(pady=10)

load_tasks()
root.mainloop()

# Programı başlat
if __name__ == "__main__":
setup_database()
login_screen()

Что я пробовал: я пробовал использовать параметр bg="transparent" для виджетов «Ввод» и «Кнопка» в Tkinter, надеясь сделать их прозрачными. Я также удалил границы и установил для их свойства рельефа значение «плоский». Кроме того, я использовал библиотеку Pillow, чтобы добавить фоновое изображение в окно Tkinter. Я также попытался удалить цвет фона этих виджетов по умолчанию и поэкспериментировал с установкой различных свойств, таких как bd=0 и highlightthickness=0.
Чего я ожидал: я ожидал, что поля ввода будут «Имя пользователя» и «Пароль» должны быть прозрачными, чтобы за ними было видно фоновое изображение. Точно так же я ожидал, что кнопки «Войти» и «Регистрация» будут иметь прозрачный фон, чтобы фоновое изображение окна также отображалось через эти элементы пользовательского интерфейса.
Однако даже после применения этих элементов изменения, я по-прежнему вижу белый фон за полями ввода и кнопками, а это не то поведение, которое я ожидал.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ound-image
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»