Bottom Page

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()
Quote
#2
When binding events in tkinter, the fuction you bind needs an event argument. The function you are binding has no arguments.
Quote
#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
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  [WxPython] Bind error PeterLinux 1 99 Today, 03:07 AM
Last Post: joe_momma
  Returning a value from a tkinter.button call markr0804 4 249 Feb-16-2020, 10:35 AM
Last Post: markr0804
  Problem with Submit button Tkinter Reldaing 2 208 Jan-05-2020, 01:58 AM
Last Post: balenaucigasa
  Unable fetch fucntion data in class in tkinter jenkins43 2 395 Nov-30-2019, 09:47 PM
Last Post: jenkins43
  Unable to put background image on Tkinter Frame jenkins43 2 1,452 Nov-27-2019, 11:38 AM
Last Post: jenkins43
  tkinter button not accessing the command when clicked jhf2 1 295 Nov-23-2019, 10:17 PM
Last Post: DT2000
  Tkinter button in for Simpsunt 3 255 Nov-23-2019, 01:41 AM
Last Post: Larz60+
  [Tkinter] Checking button click in Tkinter GalaxyCoyote 3 511 Oct-20-2019, 03:28 AM
Last Post: GalaxyCoyote
  [Tkinter] Tkinter button help and general commands Iceman 1 420 Sep-01-2019, 05:09 PM
Last Post: Yoriz
  Unable to update or refresh label text in tkinter jenkins43 3 1,553 Jul-24-2019, 02:09 PM
Last Post: Friend

Forum Jump:


Users browsing this thread: 1 Guest(s)