Python Forum
Tkinter:Unable to bind and unbind function with a button
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tkinter:Unable to bind and unbind function with a button
#1
I'm having trouble binding and unbinding a function(using 2 buttons) to display a keyboard.

I basically want keyboard()to be hidden first, but when the
morn_med_button is clicked, it will appear and it will disappear when confirm_button1 is clicked.

When i run the code, it says:
return self.func(*args)
TypeError:keyboard() takes 0 positional arguments but 1 was given

This is my code below.

from tkinter import *
import RPi.GPIO as GPIO
from tkinter import ttk
from tkinter import font as tkfont
import time


root = Tk()
root.geometry("2000x1900")
root.config(bg="light blue")
root.frame = Frame(root)

morn_med_Text=Text(root,width=20,height=13)
morn_med_label=Label(root,bg="light blue", font=("Arial",15 ))
morn_med_button = Button(root, text="Add Medication", command=add_medication1, font=("Arial", 12))  
morn_med_button.place(relx=0.2, rely = 0.76, anchor = CENTER)
confirm_button1=Button(root, text="Confirm", command=confirm1, font=("Arial", 12)) 


def confirm1():
    global morn_med_label
    morn_med=morn_med_Text.get("1.0",END)
    morn_med_label.place(relx=0.179, rely =0.82, anchor = CENTER)
    morn_med_Text.place_forget()
    confirm_button1.place_forget()
    morn_med_button.place(relx=0.2, rely = 0.76, anchor = CENTER)
    morn_med_label.config(text=morn_med)
    [u]confirm_button1.bind("<Button-1>",keyboard)[/u]


def keyboard():
    morn_med_button.unbind("<Button-1>")
    def select(value):
        if value == "Clear":
            morn_med_Text.delete(1.0,END)
        elif value == "Enter":
             morn_med_Text.insert(INSERT,'\n')
        elif value=="Backspace":
            text=morn_med_Text.get(1.0,END)
            morn_med_Text.insert(text[:-1],END)
        else:
            morn_med_Text.insert(END, value)
    buttons=[
    'q','w','e','r','t','y','u','i','o','p','Backspace','7','8','9','-',
    'a','s','d','f','g','h','j','k','l','(',')','4','5','6','+',
    'z','x','c','v','b','n','m',',','.','Clear','Enter','1','2','3','/',
    ' ',
]

    label1=Label(root,text='')
    label2=Label(root,text='')
    label2.grid(row=7,columnspan=15)
    label3=Label(root,text='')
    label3.grid(row=8,columnspan=15)
    varRow=9
    varColumn=0

    for button in buttons:
        command=lambda x=button: select(x)
        if button!=" ":
            Button(root,text=button,width=7,bg="#000000",fg="#ffffff",
                       activebackground="#ffffff",activeforeground="#000000",relief='raised',padx=9,
                       pady=9,bd=7,command=command,font=("Arial",17 )).grid(row=varRow,column=varColumn)
        if button==" ":
            Button(root,text=button,width=80,bg="#000000",fg="#ffffff",
                       activebackground="#ffffff",activeforeground="#000000",relief='raised',padx=4,
                       pady=4,bd=7,command=command,font=("Arial",20 )).grid(row=13,columnspan=20)
        varColumn+=1
        if varColumn>14 and varRow==9:
            varColumn=0
            varRow+=1
        if varColumn>14 and varRow==10:
            varColumn=0
            varRow+=1

root.mainloop()
Reply
#2
When binding events in tkinter, the fuction you bind needs an event argument. The function you are binding has no arguments.
Reply
#3
declare your functions before you create the buttons unless you create a class
python reads your script from top to bottom:
def add_medication1():
    keyboard()
 
def confirm1():
    global morn_med_label,confirm_button1
    morn_med=morn_med_Text.get("1.0",END)
    morn_med_label.place(relx=0.179, rely =0.82, anchor = CENTER)
    morn_med_Text.place_forget()
    confirm_button1.place_forget()
    morn_med_button.place(relx=0.2, rely = 0.76, anchor = CENTER)
    morn_med_label.config(text=morn_med)
    confirm_button1.bind("<Button-1>",keyboard) 
morn_med_Text=Text(root,width=20,height=13)
morn_med_Text.place(x=300,y=300)
morn_med_label=Label(root,bg="light blue", font=("Arial",15 ))
morn_med_button = Button(root, text="Add Medication", command=add_medication1, font=("Arial", 12))  
morn_med_button.place(relx=0.2, rely = 0.76, anchor = CENTER)
confirm_button1=Button(root, text="Confirm", command=confirm1, font=("Arial", 12))
confirm_button1.place(x=5,y=400)
if you bind a mouse event to a function it requires an argument
def keyboard(event):
    morn_med_button.unbind("<Button-1>")
    def select(value):
        ....# more       
I used event but it could be anything you want- then you can get information from the event like x= event.x to give you the x,y position of the mouse click
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Tkinter] TKinter Remove Button Frame Nu2Python 8 802 Jan-16-2024, 06:44 PM
Last Post: rob101
  tkinter - touchscreen, push the button like click the mouse John64 5 739 Jan-06-2024, 03:45 PM
Last Post: deanhystad
  Using Tkinter inside function not working Ensaimadeta 5 4,858 Dec-03-2023, 01:50 PM
Last Post: deanhystad
  Centering and adding a push button to a grid window, TKinter Edward_ 15 4,369 May-25-2023, 07:37 PM
Last Post: deanhystad
  Tkinter won't run my simple function AthertonH 6 3,739 May-03-2022, 02:33 PM
Last Post: deanhystad
  [Tkinter] bind menator01 1 1,234 Apr-15-2022, 08:47 PM
Last Post: menator01
  Can't get tkinter button to change color based on changes in data dford 4 3,361 Feb-13-2022, 01:57 PM
Last Post: dford
  [Tkinter] tkinter best way to pass parameters to a function Pedroski55 3 4,733 Nov-17-2021, 03:21 AM
Last Post: deanhystad
  Creating a function interrupt button tkinter AnotherSam 2 5,412 Oct-07-2021, 02:56 PM
Last Post: AnotherSam
  [Tkinter] Have tkinter button toggle on and off a continuously running function AnotherSam 5 4,917 Oct-01-2021, 05:00 PM
Last Post: Yoriz

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020