Я бы спросил, почему этот код работает
import tkinter as tk
class App(tk.Tk):
def __init__(self, *args, **kwargs):
super().__init__()
print(args,kwargs)
self.title("Hello World")
self.geometry("400x300")
if __name__ == '__main__':
args = ('Y','Y','Z')
kwargs = {'server':"127.0.0.1",'user':"guest",'passw':"12345",'database':"genbank"}
app = App(*args,**kwargs)
, но если я заменю
super().__init__()
на
super().__init__(*args, **kwargs)
, то это должно быть правильно, этоне работает.
возвращает
super().__init__(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'passw'
есть предложения?
пожелания
обновление
после @Bryan Oakley note я хотел бы добавить некоторые соображения.
0) Я понял, что kwargs принимает только ключевые значения по умолчанию:
class tkinter.Tk (screenName = None), baseName = None, className = 'Tk', useTk = 1)
import tkinter as tk
class App(tk.Tk):
def __init__(self, *args, **kwargs):
print("my __init__ args {}".format(args))
print("my __init__ kwargs {}".format(kwargs))
try:
super().__init__(*args, **kwargs)
except:
args = ()
super().__init__(*args, **kwargs)
print("my super args {}".format(args))
print("my super kwargs {}".format(kwargs))
self.title("Hello World")
self.geometry("400x300")
if __name__ == '__main__':
args = ('x','y','z')
kwargs = {'baseName':'foo','className':'bar'}
app = App(*args,**kwargs)
, которые возвращают
my init args ('x', 'y ',' z ')
my init kwargs {' baseName ':' foo ',' className ':' bar '}
my super args ()
мои суперкварги {{baseName ':' foo ',' className ':' bar '}
1) но аргументы?
на работе, где яУ меня Windows, я могу передать аргументы, в Linux, Debian 9, он возвращает
ошибка, для этого я поставил исключение, например:
_tkinter.TclError: не удалось подключиться к дисплею "x"
Извините, что я так деликатен в этом вопросе, но я просто пока не понимаю.