当前位置: 首页 > 知识库问答 >
问题:

不带标题栏的python tkinter还原窗口

蒯卓君
2023-03-14

我有一个 窗口,我从该窗口中删除了标题栏,并添加了一个自定义的“关闭”和“最小化”按钮。当程序首次加载时,它不会向任务栏显示图标。当我单击定制的最小化按钮时,它会在任务栏上创建一个图标;然而,当我单击恢复窗口时,我无法再次摆脱标题栏。

我希望图标始终显示在任务栏上,并且当程序最小化然后还原时,我希望标题栏仍然从 中消失。不幸的是,我很难在最小化之前和之后重置标志而不使任务栏图标消失。

请让我知道我做错了什么。谢啦!

#!/usr/bin/python3
from tkinter import *
import tkinter as tk
import datetime
import time
import math

root = tk.Tk() 

root.overrideredirect(1)

def close():
    root.destroy()
def minimizeWindow():
    root.withdraw()
    root.overrideredirect(False)
    root.iconify()

root.resizable(False, False)
canvas = Canvas(root, width = 400, height = 400)
canvas.pack()
exit = Button(root, text='x', command = close)
exitWindow = canvas.create_window(10,10, window=exit)
minimize = Button(root, text='-', command = minimizeWindow)
minimizeWindow = canvas.create_window(30,10,window=minimize)
icon = PhotoImage(file='py.gif')
root.tk.call('wm', 'iconphoto', root._w, icon)
root.mainloop() # starts the mainloop

我试图使它在windows和Linux上都能工作。我把标题栏全部去掉的原因是为了避免操作系统字体和窗口设置的差异。它目前在两种操作系统上都表现出相同的行为。

重申一下,我希望任务栏图标在程序启动时显示出来,并且我希望程序的窗口在从最小化恢复时保持无标题栏的状态。

共有1个答案

南门鸿畴
2023-03-14

这取决于您使用的是什么操作系统。如果您使用的是Windows,下面的解决方案应该适用于您。

我添加了一个函数,它将重新应用 。这个函数由我们在root上使用的绑定调用。

null

对于linux,您可能需要使用不同的文件类型。在Windows上您使用。ico,而在linux上您可能需要使用。xbm。

在这篇文章中可以看到关于它的回答:在ubuntu中的Python3 tkinter iconbitmap错误

更新:

我已经添加了 ,但是我不确定至少在Windows中编译代码之前是否能够更改任务栏图标。您可以使用py2exe或freeze。我以前使用过freeze,我有一个客户桌面和任务栏图标我用于它。

import tkinter as tk

root = tk.Tk() 
root.geometry("400x400")
root.overrideredirect(1)
root.resizable(False, False)
root.columnconfigure(0, weight=1)
root.iconbitmap(default='./Colors/small_red.ico')


def close():
    root.destroy()

def minimizeWindow():
    root.withdraw()
    root.overrideredirect(False)
    root.iconify()

def check_map(event): # apply override on deiconify.
    if str(event) == "<Map event>":
        root.overrideredirect(1)
        print ('Deiconified', event)
    else:
        print ('Iconified', event)

bar_frame = tk.Frame(root)
bar_frame.grid(row=0, column=0, sticky="ew")
bar_frame.columnconfigure(0, weight=1)
icon = tk.PhotoImage(file='./Colors/small_red.gif')
# This appears to have the same results so not sure what the difference is from iconbitmap.
# root.tk.call('wm', 'iconphoto', root._w, icon) 

tk.Button(bar_frame, text='x', command=close).grid(row=0, column=1)
tk.Button(bar_frame, text='-', command=minimizeWindow).grid(row=0, column=2)

root.bind('<Map>', check_map) # added bindings to pass windows status to function
root.bind('<Unmap>', check_map)

root.mainloop()
 类似资料:
  • 我创建了从JFrame继承的通知窗口,但它们在windows任务栏中以新图标出现。当通知出现时(例如在skype中,当新消息来时),是否可以突出显示主应用程序图标,而不在通知窗口的任务栏中显示新图标? 以下是弹出窗口的代码:

  • 这个问题我已经找了很多遍了,但似乎没有人知道。我在python 2.7中创建了一个简单的tkinter窗口(tcl 8.5),并希望它最大化,就像我要按右上角的maximize按钮一样。使用 选项不是一个选项,因为它会删除标题栏。 我尝试了以下操作: 问题是窗口现在在Windows任务栏下面,因此我的一些元素没有显示出来。一个简单的方法是将height设置为screenheight-some_co

  • 我正在对Scene builder进行修补,以使UI设计得尽可能好,但我在JavaFX中定位标题窗格时遇到问题。正如您可能看到的,我有网格窗格内的标题窗格,锚窗格内的顶部,左侧和右侧锚定设置,和文本区的底部,左侧和右侧锚定设置。 我想要的:带标题窗格的网格窗格应该在顶部,当所有标题窗格折叠时,网格应该只有该窗格标签的高度。其余的空间应由文本区域占用。 我怎样才能做到这一点呢?

  • 标题栏放在页面顶部 <header class="bar bar-nav">   <h1 class="title">标题</h1> </header>

  • 我们的应用程序已经用了GtkHeaderBar,但至今它仍然只在顶端显示一个‘正常’的window titlebar。这有点多余,我们现在要用header bar 来替代titlebar。为了达到目的,我们将header bar移到窗口的直接子成员中,并把它设为titlebar。 <?xml version="1.0" encoding="UTF-8"?> <interface> <!-- i

  • 我使用这段代码来最大化和恢复我的自定义表单。但是当窗体最大化时,它仍然可以拖动,我使用计时器来拖动窗体。