Мне нужна помощь, пожалуйста. (Python)Python

Программы на Python
Ответить
Anonymous
 Мне нужна помощь, пожалуйста. (Python)

Сообщение Anonymous »

Я делаю приложение для обоев. Приложение будет иметь функцию слайд-шоу и отдельных обоев. Дело в том, что приложение не работает должным образом в том, что если пользователь сосредоточится на другом приложении, обои будут черными. Но сколько бы я ни старался, обои всегда становятся черными. Даже если я сосредоточусь на рабочем столе. Я стараюсь столько, сколько хочу, но он всегда становится черным, а обои редко возвращаются обратно.
КОД:
import tkinter as tk
from tkinter import filedialog, messagebox
import os
from time import sleep
import ctypes
import threading
import win32gui

BLACK_WALLPAPER = "C:\\Windows\\Web\\Screen\\img0.jpg" # Siyah ekran yolu
default_wallpaper = None
current_wallpaper = None
app_window_title = "Duvar Kağıdı Uygulaması"

def set_wallpaper(image_path):
global current_wallpaper
if current_wallpaper != image_path:
ctypes.windll.user32.SystemParametersInfoW(20, 0, image_path, 3)
current_wallpaper = image_path
label.config(text=f"Duvar kağıdı ayarlandı: {image_path}")

def select_file():
global default_wallpaper
file_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")])
if file_path:
default_wallpaper = file_path
set_wallpaper(file_path)
input_frame.pack_forget()

def select_folder():
folder_path = filedialog.askdirectory()
if folder_path:
response = messagebox.askquestion("Slayt Gösterisi", "Klasör yüklensin mi?")
if response == 'yes':
input_frame.pack(pady=10)
start_slideshow_thread(folder_path)

def save_duration():
duration = entry.get()
try:
global slideshow_duration
slideshow_duration = float(duration) * 60 # Dakika -> Saniye
label.config(text=f"Slayt Süresi: {duration} dakika")
except ValueError:
label.config(text="Geçerli bir sayı giriniz.")

def start_slideshow_thread(folder_path):
thread = threading.Thread(target=start_slideshow, args=(folder_path,))
thread.daemon = True
thread.start()

def start_slideshow(folder_path):
global default_wallpaper
try:
images = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.lower().endswith((".png", ".jpg", ".jpeg"))]
if not images:
label.config(text="Klasörde görüntü bulunamadı.")
return
default_wallpaper = images[0]
while True:
for image in images:
set_wallpaper(image)
sleep(slideshow_duration)
except Exception as e:
label.config(text=f"Hata: {e}")

def check_focus():
global default_wallpaper, current_wallpaper
while True:
active_window = win32gui.GetForegroundWindow()
window_title = win32gui.GetWindowText(active_window)
window_class = win32gui.GetClassName(active_window)

# Eğer kullanıcı masaüstüne dönüyorsa
if window_class == "WorkerW": # "WorkerW" sınıfı masaüstü penceresinin sınıfıdır
if default_wallpaper and current_wallpaper != default_wallpaper:
set_wallpaper(default_wallpaper) # Seçilen duvar kağıdını geri yükle
current_wallpaper = default_wallpaper # Güncellenmiş wallpaper'ı sakla
elif window_title == app_window_title:
pass # Uygulamaya odaklanıldığında hiçbir şey yapma
else:
# Eğer başka bir uygulamaya odaklanıldığında, duvar kağıdını siyah yap
if current_wallpaper != BLACK_WALLPAPER:
set_wallpaper(BLACK_WALLPAPER)
current_wallpaper = BLACK_WALLPAPER # Siyah duvar kağıdını sakla
sleep(2)

root = tk.Tk()
root.title(app_window_title)
root.geometry("400x400")

btn_file = tk.Button(root, text="Dosya Seç", command=select_file)
btn_file.pack(pady=10)

btn_folder = tk.Button(root, text="Klasör Seç", command=select_folder)
btn_folder.pack(pady=10)

input_frame = tk.Frame(root)
tk.Label(input_frame, text="Slayt geçiş süresi (dakika):").pack(side=tk.LEFT, padx=5)
entry = tk.Entry(input_frame)
entry.pack(side=tk.LEFT, padx=5)
tk.Button(input_frame, text="Kaydet", command=save_duration).pack(side=tk.LEFT, padx=5)
input_frame.pack_forget()

label = tk.Label(root, text="Bir dosya veya klasör seçin.")
label.pack(pady=20)

slideshow_duration = 60 # 1 min default.

focus_thread = threading.Thread(target=check_focus)
focus_thread.daemon = True
focus_thread.start()

root.mainloop()
< /code>
Когда я возвращаюсь на рабочий стол, указанные обои должны вернуться. Когда я сосредотачиваюсь на применении, я хочу, чтобы обои были черными.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ase-python
Ответить

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

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

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

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

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