Python TKinter:如何设置子窗口(顶级)的窗口图标
我试图在TKinter内置的主窗口的子窗口中添加一个窗口图标。为了便于移植(也就是说没有丢失的文件),我将base64编码的gif设置为一个变量。我无法为子窗口复制此内容Python TKinter:如何设置子窗口(顶级)的窗口图标,python,tkinter,Python,Tkinter,我试图在TKinter内置的主窗口的子窗口中添加一个窗口图标。为了便于移植(也就是说没有丢失的文件),我将base64编码的gif设置为一个变量。我无法为子窗口复制此内容 from Tkinter import * ICON = """ R0lGODlhMgAyAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqm
from Tkinter import *
ICON = """
R0lGODlhMgAyAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV
ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDV
mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMr
zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq
/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2Yr
AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaq
M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kA
ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmA
mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/
zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV
/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/
AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9V
M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//V
Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAAyADIA
AAj/APcJHEiwoMGDCBMqXCjQnsOHECEynIgQIjx7FzNi3HjRIcWPHC0+7LixpL2PCk2GXNmx5UaU
BkW6NDlzpkeY+xxq1MmTZU+XF2GWrNnz50ijJykO5Um0KdKgDI+qJEm1KM2fC3cCZYrU59KbFb1O
NVr1a8aEY30SlWqTZNKYK6+a5eqU48GiO0sC2Mu3I9++XUkWXFq15d+9Og8DeMqVoE28DhX7PdzW
KkGyXDEqTnyYcciBmOVKjkyZLeSGleVGtHp0reB9qZ1qLJyWaMO5X+Xm3ToXHmrPdWkHLnob91rC
rYFjFKhVeVfIuV+b3shXeXN71Zv+zv3X9fS/05MyoIbX2fvQ8mSZQyedXTn63LedbjaOvTPj7Y/r
g8e9+XrH+JhdNN9XA96nXnQP9dfTfP6BlRN9Ag6o2GLIDXWZeQlOOOFwPA0GIXsaIvahQebNFOJ0
j91VImsyKYdWWcfNpptpKXmFYWxSZYXijhXWNNGM9NXWoVJBxjgXTCsWOSSS0CXpEk6X2eicb1DC
hduVVSIEY5MOZhnWli95KaaXAQEAOw==
"""
class ChildWindow(Toplevel):
def __init__(self, callingFrame):
self.parent = callingFrame
Toplevel.__init__(self)
self.title("Child")
self.initUI()
def initUI(self):
#this doesn't work in this class, unlike the first class where it does work.
global ICON
self.icon = PhotoImage(data=ICON)
self.call('wm', 'iconphoto', self.parent._w, self.icon)
btn = Button(self, text="Close", command=self.destroy)
btn.pack()
class ParentWindow(object):
def __init__(self, parent):
self.parent = parent
self.parent.title("Parent")
self.frame = Frame(parent)
self.initUI()
def initUI(self):
global ICON
self.icon = PhotoImage(data=ICON)
self.parent.call('wm', 'iconphoto', self.parent._w, self.icon)
btn = Button(self.parent, text="Child", command=self.opennew)
btn.pack()
def opennew(self):
newwin = ChildWindow(self)
def main():
root = Tk()
win = ParentWindow(root)
root.geometry()
root.mainloop()
if __name__ == '__main__':
main()
替换:
self.call('wm', 'iconphoto', self.parent._w, self.icon)
与:
我想我会和大家分享如何在不使用类的情况下做类似的事情。在我的示例中,我使用了父项和子项来引用窗口,并在窗口上使用不同的背景色来显示在哪里发生的情况,并且我向与图标相关的部分添加了注释
from tkinter import *
parent = Tk()
parent.title("PARENT")
parent.geometry("200x200")
parent.config(bg="yellow")
# Define the icon:
ICON = """
R0lGODlhMgAyAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV
ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDV
mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMr
zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq
/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2Yr
AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaq
M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kA
ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmA
mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/
zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV
/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/
AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9V
M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//V
Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAAyADIA
AAj/APcJHEiwoMGDCBMqXCjQnsOHECEynIgQIjx7FzNi3HjRIcWPHC0+7LixpL2PCk2GXNmx5UaU
BkW6NDlzpkeY+xxq1MmTZU+XF2GWrNnz50ijJykO5Um0KdKgDI+qJEm1KM2fC3cCZYrU59KbFb1O
NVr1a8aEY30SlWqTZNKYK6+a5eqU48GiO0sC2Mu3I9++XUkWXFq15d+9Og8DeMqVoE28DhX7PdzW
KkGyXDEqTnyYcciBmOVKjkyZLeSGleVGtHp0reB9qZ1qLJyWaMO5X+Xm3ToXHmrPdWkHLnob91rC
rYFjFKhVeVfIuV+b3shXeXN71Zv+zv3X9fS/05MyoIbX2fvQ8mSZQyedXTn63LedbjaOvTPj7Y/r
g8e9+XrH+JhdNN9XA96nXnQP9dfTfP6BlRN9Ag6o2GLIDXWZeQlOOOFwPA0GIXsaIvahQebNFOJ0
j91VImsyKYdWWcfNpptpKXmFYWxSZYXijhXWNNGM9NXWoVJBxjgXTCsWOSSS0CXpEk6X2eicb1DC
hduVVSIEY5MOZhnWli95KaaXAQEAOw==
"""
# Choose the icon:
icon = PhotoImage(data=ICON)
# Make a parent call for the icon from within the parent:
parent.call("wm", "iconphoto", parent._w, icon)
def new_child():
child = Toplevel(parent)
child.title("CHILD")
child.geometry("200x200")
child.config(bg="green")
# Make a parent call for the icon from within the child:
parent.call("wm", "iconphoto", child._w, icon)
childbutton = Button(child, text="Close Child", command=child.destroy)
childbutton.pack(pady=10)
parentbutton1 = Button(parent, text="Open Child", command=new_child)
parentbutton1.pack(pady=10)
parentbutton2 = Button(parent, text="Close Parent", command=parent.destroy)
parentbutton2.pack(pady=5)
parent.mainloop()
from tkinter import *
parent = Tk()
parent.title("PARENT")
parent.geometry("200x200")
parent.config(bg="yellow")
# Define the icon:
ICON = """
R0lGODlhMgAyAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV
ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDV
mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMr
zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq
/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2Yr
AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaq
M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kA
ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmA
mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/
zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV
/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/
AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9V
M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//V
Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAAyADIA
AAj/APcJHEiwoMGDCBMqXCjQnsOHECEynIgQIjx7FzNi3HjRIcWPHC0+7LixpL2PCk2GXNmx5UaU
BkW6NDlzpkeY+xxq1MmTZU+XF2GWrNnz50ijJykO5Um0KdKgDI+qJEm1KM2fC3cCZYrU59KbFb1O
NVr1a8aEY30SlWqTZNKYK6+a5eqU48GiO0sC2Mu3I9++XUkWXFq15d+9Og8DeMqVoE28DhX7PdzW
KkGyXDEqTnyYcciBmOVKjkyZLeSGleVGtHp0reB9qZ1qLJyWaMO5X+Xm3ToXHmrPdWkHLnob91rC
rYFjFKhVeVfIuV+b3shXeXN71Zv+zv3X9fS/05MyoIbX2fvQ8mSZQyedXTn63LedbjaOvTPj7Y/r
g8e9+XrH+JhdNN9XA96nXnQP9dfTfP6BlRN9Ag6o2GLIDXWZeQlOOOFwPA0GIXsaIvahQebNFOJ0
j91VImsyKYdWWcfNpptpKXmFYWxSZYXijhXWNNGM9NXWoVJBxjgXTCsWOSSS0CXpEk6X2eicb1DC
hduVVSIEY5MOZhnWli95KaaXAQEAOw==
"""
# Choose the icon:
icon = PhotoImage(data=ICON)
# Make a parent call for the icon from within the parent:
parent.call("wm", "iconphoto", parent._w, icon)
def new_child():
child = Toplevel(parent)
child.title("CHILD")
child.geometry("200x200")
child.config(bg="green")
# Make a parent call for the icon from within the child:
parent.call("wm", "iconphoto", child._w, icon)
childbutton = Button(child, text="Close Child", command=child.destroy)
childbutton.pack(pady=10)
parentbutton1 = Button(parent, text="Open Child", command=new_child)
parentbutton1.pack(pady=10)
parentbutton2 = Button(parent, text="Close Parent", command=parent.destroy)
parentbutton2.pack(pady=5)
parent.mainloop()