Whenever I program something in python with Tkinter
, the code looks like this:
from Tkinter import *
class GUI():
def __init__(self, master):
self.master = master # master is an instance of Tk
self.master.title("") # set the name of the window
self.frame = Frame(self.master, width=800, height=500, bg="#eeeeee")
# 800, 500 and "#eeeeee" are examples of course
self.frame.pack()
self.canvas = Canvas(self.frame, width=800, height=500, bg="ffffff")
self.canvas.place(x=0, y=0)
#mostly there are some other widgets
# here are obviously other methods
def main():
root = Tk()
app = GUI(root) # root and app.master are synonyms now
app.master.mainloop()
if __name__ == '__main__':
main()
My problem is, I don't really understand why Frame(width=800, height=500)
or place(x=0, y=0)
is working: I didn't define the parameters height
, width
, x
and y
. Looking at the code in the Tkinter
- module, the functions expect a paramter called *args
or **kw
. I know how to use them (at least well enough to develop some small applications), but I don't know how to define a function which uses this parameters. I feel like I don't know really much about this part of python, though I can work with it.
So my Question is:
how can I define a function, what is called with the following Syntax:
functionName(parameterName1 = value, paramterName2 = value, ...)
I don't need to know how to make a function what accepts a varying amount of parameters (combined with my problem), but it would be fine too.
What you are referring to are called keyword arguments .
Arguably one of the best ways to define a function with specific keyword arguments is to provide defaults. It's common for the default to be None
if you don't have the need for any other default:
def functionName(parameterName1=None, parameterName2=None):
print("parameter one is: %s" % str(parameterName1))
print("parameter two is: %s" % str(parameterName2))
You can then call this function like so:
foo = functionName(parameterName1="hello", parameterName2="world")
You can also do what tkinter functions do, and accept **kwargs
as a parameter. This gathers up all named arguments into a dictionary that you can then iterate over:
def functionName(**kwargs):
print("the arguments are:", kwargs)
Note: you don't have to use the name kwargs
-- you can use any name you want ( **kw
, **kwargs
, **whatever
), but kwargs
seems to be the most common.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.