#python #python-3.x #tkinter
Вопрос:
В настоящее время я работаю над проектом для своего ноутбука с помощью экранной панели, чтобы создать окно быстрого доступа, которое отображает и позволяет мне открывать файлы, которые я часто использую. Я сделал сетку и кнопки, но когда я нажимаю одну из кнопок в сетке, лямбда передает только позицию последней кнопки. Как я могу сделать так, чтобы команда кнопки отправляла положение сетки нажатой кнопки? заранее спасибо
import tkinter as tk
from tkinter import *
from tkinter import filedialog
from tkinter.filedialog import askopenfilename
import tkinter.font as font
import PIL as pl
from PIL import ImageTk, Image
import ctypes
# ----------WINDOW----------
# new window
root = Tk()
# remove title bar
root.overrideredirect(1)
# roughly move to second monitor
root.geometry(' 100 1000')
# maximize the window
root.state('zoomed')
# window on top
root.attributes('-topmost', 1)
lastClickX = 0
lastClickY = 0
def SaveLastClickPos(event):
global lastClickX, lastClickY
lastClickX = event.x
lastClickY = event.y
def Dragging(event):
x, y = event.x - lastClickX root.winfo_x(), event.y - lastClickY root.winfo_y()
root.geometry(" %s %s" % (x , y))
# make a frame for the title bar
title_bar = Frame(root, bg='#2e2e2e', relief='raised', bd=2, highlightthickness=0)
# put a close button on the title bar
close_font = font.Font(size=30)
close_button = Button(title_bar, text='X', command=root.destroy, bg='#2e2e2e', padx=20, pady=2, activebackground='red',
bd=0, fg='white',highlightthickness=0)
close_button['font'] = close_font
window = Canvas(root, bg='#2e2e2e',highlightthickness=0)
# pack the widgets
title_bar.pack(expand=0, fill=X)
close_button.pack(side=RIGHT)
window.pack(expand=1, fill=BOTH)
title_bar.bind('<Button-1>', SaveLastClickPos)
title_bar.bind('<B1-Motion>', Dragging)
# -------FILE EXPLORER-------
def explore(x, y):
Tk().withdraw()
filename = askopenfilename()
print(filename)
filepath = open('filepath.txt', 'a')
N = str(x * 10 y)
print(N)
filepath.write(N " " filename 'n')
filepath.close()
# ------------GRID-----------
Grid.rowconfigure(window, 0, weight=1)
Grid.columnconfigure(window, 0, weight=1)
frame=Frame(window)
frame.grid(row=0, column=0, sticky=N S E W)
AddIMG = Image.open(r'C:Usersvan dolderPicturespngImage.png')
Addphoto = ImageTk.PhotoImage(AddIMG)
Density=10
hor=int(Density)
ver=int(hor / 2)
for x in range(hor):
Grid.columnconfigure(frame, x, weight=1)
for y in range(ver):
Grid.rowconfigure(frame, y, weight=1)
add_button = Button(frame, image=Addphoto, fg='white', bg='#2e2e2e', relief='flat', borderwidth=1)
add_button.grid(row=y, column=x, sticky=N S E W)
add_button.config(command=lambda column=x, row=y: explore(x, y))
root.mainloop()
Любая помощь будет очень признательна.
Комментарии:
1. Пожалуйста, постарайтесь свести к минимуму свой пример, чтобы помочь людям понять, что не так. Например, является ли функция «Перетаскивания» существенной для вашей проблемы в примере?
Ответ №1:
Вы пытаетесь создать закрытие, но не используете переменные, созданные lambda
.
Вам нужно это изменить:
add_button.config(command=lambda column=x, row=y: explore(x, y))
К этому:
add_button.config(command=lambda column=x, row=y: explore(column, row))
Комментарии:
1. Ты просто потрясающая! спасибо за быстрый ответ! это решило все мои проблемы