Topic: Bind & Frames [risolto]  (Letto 348 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline japogi

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Bind & Frames [risolto]
« il: Aprile 19, 2020, 18:13 »
Salve,
sto sviluppando il mio primo programma e nel progetto è stata eliminata la barra del titolo per crearne una secondo le mie specifiche. Quindi ho creato un frame specifico all'interno del frame madre che mi riproducesse la barra del titolo ed implementandolo con il "bind" la funzione di trascinamento mi funziona tranquillamente, ma se inserisco Label e/o altro come button all'interno del frame specifico la funzione "event" del mouse non mi funziona più.
Ci sono soluzioni?



from tkinter import *

window = Tk()
frame_title = Frame(window)
frame_body = Frame(window)

def click(event):
    global x, y
    x = event.x
    y = event.y
    print(x, y)

def drag(event):
    #global x, y
    deltax = event.x - x
    deltay = event.y - y

    newX = window.winfo_x() + deltax
    newY = window.winfo_y() + deltay

    window.geometry("+%d+%d" % (newX, newY))
    print(newX, newY)

#========================================================================================================== CONFIG ROOT
width_window = 800    # inserire la larhezza della finestra
height_window = 450   # inserire l'altezza della finestra
screen_width = window.winfo_screenwidth()   # restistuisce la larghezza del monitor
screen_hight = window.winfo_screenheight()  # restituisce l'altezza del monitor
x_coordinate = (screen_width / 2) - (width_window / 2)
y_coordinate = (screen_hight / 2) - (height_window / 2)

window.geometry("%dx%d+%d+%d" % (width_window, height_window, x_coordinate, y_coordinate))
window.overrideredirect(True)     # rimuove la barra del titolo
window.resizable(False, False)    # non fa cambiare la dimensione della finestra
window.wm_attributes("-topmost", True)  # finestra sempre in primo piano
window.configure(background="#2b2b2b", highlightthickness=3, highlightcolor="#670906")
bg_color = ("#2b2b2b")
row_color = ("#cacaca")

#============================================================================================================ TITLE BAR

frame_title.configure(background=row_color, width=794, height=25)
#logo = PhotoImage(file="logo.png")
#logo_title = Label(frame_title, image=logo, border="0", bg=row_color).grid(row=0, column=0)
#window_title = Label(frame_title, text="BARRA DEL TITOLO, padx="200", bg=row_color).grid(row=0, column=1)
#button_close_w = Button(frame_title, text="X", command=window.destroy, bd=0, bg=row_color).grid(row=0, column=2)
frame_title.grid(row=0, column=0)

#================================================================================================================= BODY
frame_body.configure(background=bg_color)
body = Label(frame_body, text="B O D Y", pady=200, bg=bg_color).grid(row=1, column=0)
frame_body.grid(row=1, column=0)
#==========================================================================================

frame_title.bind("<Button-1>", click)
frame_title.bind("<B1-Motion>", drag)

if __name__ == "__main__":
    window.mainloop()


« Ultima modifica: Aprile 20, 2020, 13:12 da japogi »

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 381
  • Punti reputazione: 0
    • Mostra profilo
Re:Bind & Frames
« Risposta #1 il: Aprile 20, 2020, 11:32 »
Ciao @japogi

Per il Tuo problema devi, semplicemente, implementare i bind sulla label, p.e. variando il Tuo codice così
frame_title.configure(background=row_color, width=794, height=25)
#logo = PhotoImage(file="logo.png")
#logo_title = Label(frame_title, image=logo, border="0", bg=row_color).grid(row=0, column=0)
#window_title = Label(frame_title, text="BARRA DEL TITOLO, padx="200", bg=row_color).grid(row=0, column=1)
#button_close_w = Button(frame_title, text="X", command=window.destroy, bd=0, bg=row_color).grid(row=0, column=2)
frame_title.grid(row=0, column=0, sticky='ew')
label_title = Label(frame_title, text='Prova di @Jasogi')
label_title.grid(row=0, column=0, sticky='ew')
frame_title.grid_columnconfigure(0, weight=1)
window.grid_columnconfigure(0, weight=1)
...
frame_title.bind("<Button-1>", click)
frame_title.bind("<B1-Motion>", drag)
label_title.bind("<Button-1>", click)
label_title.bind("<B1-Motion>", drag)


Prova e vedrai che funzia.

Detto ciò, la programmazione imperativa non è che sia il massimo per programmare interfacce utente, penso che avrai problemi nella prosecuzione, Ti suggerirei di dare una scorsa alla programmazione ad oggetti (classi).

Ciao
« Ultima modifica: Aprile 20, 2020, 11:34 da nuzzopippo »

Offline japogi

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re:Bind & Frames
« Risposta #2 il: Aprile 20, 2020, 13:09 »
Grazie sei stato utilissimo e seguirò il tuo consiglio sullo studio delle classi.

Ciaooo