Вот пример
>>> import tkinter
>>>
>>> root = tkinter.Tk()
>>> root.bell()
>>> root.mainloop()
>>>
У меня он ничего не выдаёт. Может, у тебя выдаст. Но всё работает, как видишь.
А в твоём коде корневого окна нет.
Olezhka
Как я понял, при импорте модуля в основную программу весь код модуля выполняется и подключается к основной программе.
При импорте модуля весь импортированный модуль выполняется и всё. А сама инструкция import создаёт имя, к которому привязан этот импортированный модуль в качестве объекта.
>>> import tkinter
>>> tkinter
<module 'tkinter' from '/usr/lib64/python3.6/tkinter/__init__.py'>
>>>
>>> import math
>>> math
<module 'math' from '/usr/lib64/python3.6/lib-dynload/math.cpython-36m-x86_64-linux-gnu.so'>
>>>
>>> id(math)
140241028221432
>>>
>>> math.__doc__
'This module is always available. It provides access to the\nmathematical functions defined by the C standard.'
>>>
>>> type(math)
<class 'module'>
>>>
То есть любой модуль после импортирования становится объектом класса module. И потом в этом объекте хранятся поля и методы, как у обычных объектов.
Olezhka
Но почему тогда модуль, будучи внедренным в основную программу, не видит, какие еще другие модули подключены в основной программе, не видит переменные, используемые в основной программе, и не может ими пользоваться?
Модуль просто становится объектом и этот объект привязывается к имени, которое определяется в инструкции import. Имя модуля ничем от других имён не отличается. Ты его можешь добавить в список даже.
>>> lst = [math, tkinter]
>>> lst
[<module 'math' from '/usr/lib64/python3.6/lib-dynload/math.cpython-36m-x86_64-linux-gnu.so'>, <module 'tkinter' from '/usr/lib64/python3.6/tkinter/__init__.py'>]
>>>
>>> out = [i.__doc__ for i in lst]
>>> out
['This module is always available. It provides access to the\nmathematical functions defined by the C standard.', 'Wrapper functions for Tcl/Tk.\n\nTkinter provides classes which allow the display, positioning and\ncontrol of widgets. Toplevel widgets are Tk and Toplevel. Other\nwidgets are Frame, Label, Entry, Text, Canvas, Button, Radiobutton,\nCheckbutton, Scale, Listbox, Scrollbar, OptionMenu, Spinbox\nLabelFrame and PanedWindow.\n\nProperties of the widgets are specified with keyword arguments.\nKeyword arguments have the same name as the corresponding resource\nunder Tk.\n\nWidgets are positioned with one of the geometry managers Place, Pack\nor Grid. These managers can be called with methods place, pack, grid\navailable in every Widget.\n\nActions are bound to events by resources (e.g. keyword argument\ncommand) or with the method bind.\n\nExample (Hello, World):\nimport tkinter\nfrom tkinter.constants import *\ntk = tkinter.Tk()\nframe = tkinter.Frame(tk, relief=RIDGE, borderwidth=2)\nframe.pack(fill=BOTH,expand=1)\nlabel = tkinter.Label(frame, text="Hello, World")\nlabel.pack(fill=X, expand=1)\nbutton = tkinter.Button(frame,text="Exit",command=tk.destroy)\nbutton.pack(side=BOTTOM)\ntk.mainloop()\n']
>>>