Удаление кнопок сворачивания / разворачивания в Tkinter
У меня есть программа на Python, которая открывает новые окна для отображения некоторой информации «о». У этого окна есть собственная кнопка закрытия, и я сделал ее неизменяемой. Тем не менее, кнопки для максимизации и минимизации все еще существуют, и я хочу, чтобы они исчезли.
Я использую Tkinter, упаковывая всю информацию для отображения в классе Tk.
Код на данный момент приведен ниже. Я знаю, что это некрасиво, и я планирую расширить информацию, превратив ее в класс, но я хочу решить эту проблему, прежде чем двигаться дальше.
Кто-нибудь знает, как я могу управлять, какие кнопки по умолчанию отображаются диспетчером Windows?
def showAbout(self): if self.aboutOpen==0: self.about=Tk() self.about.title("About "+ self.programName) Label(self.about,text="%s: Version 1.0" % self.programName ,foreground='blue').pack() Label(self.about,text="By Vidar").pack() self.contact=Label(self.about,text="Contact: adress@gmail.com",font=("Helvetica", 10)) self.contact.pack() self.closeButton=Button(self.about, text="Close", command = lambda: self.showAbout()) self.closeButton.pack() self.about.geometry("%dx%d+%d+%d" % (175,\ 95,\ self.myParent.winfo_rootx()+self.myParent.winfo_width()/2-75,\ self.myParent.winfo_rooty()+self.myParent.winfo_height()/2-35)) self.about.resizable(0,0) self.aboutOpen=1 self.about.protocol("WM_DELETE_WINDOW", lambda: self.showAbout()) self.closeButton.focus_force() self.contact.bind('', self.contactMouseOver) self.contact.bind('', self.contactMouseOver) self.contact.bind('', self.mailAuthor) else: self.about.destroy() self.aboutOpen=0 def contactMouseOver(self,event): if event.type==str(7): self.contact.config(font=("Helvetica", 10, 'underline')) elif event.type==str(8): self.contact.config(font=("Helvetica", 10)) def mailAuthor(self,event): import webbrowser webbrowser.open('mailto:adress@gmail.com',new=1)
2 ответа
В общем, какие декорации WM (оконный менеджер) решает отображать, не может быть легко продиктовано таким инструментарием, как Tkinter. Итак, позвольте мне резюмировать то, что я знаю, плюс то, что я нашел:
import Tkinter as tk root= tk.Tk() root.title("wm min/max") # this removes the maximize button root.resizable(0,0) # # if on MS Windows, this might do the trick, # # but I wouldn't know: # root.attributes(toolwindow=1) # # for no window manager decorations at all: # root.overrideredirect(1) # # useful for something like a splash screen root.mainloop()
Также существует вероятность того, что для окна Toplevel , кроме корневого, вы можете:
И это удалит кнопки min / max, но это также зависит от оконного менеджера. Из того, что я читал, MS Windows WM удаляет их.
from tkinter import * qw=Tk() qw.resizable(0,0) #will disable max/min tab of window qw.mainloop()
from tkinter import * qw=Tk() qw.overrideredirect(1) # will remove the top badge of window qw.mainloop()
Вот два способа отключить параметр максимизации и минимизации в tkinter
Помните, что код для кнопки, показанной на изображении, не находится в примере, поскольку это решение относительно того, как сделать вкладку max / min нефункциональной или как удалить
Убрать кнопки Свернуть Развернуть Закрыть на форме
Убрать кнопки закрыть/развернуть/свернуть на сцене JavaFX
Начал освоение JavaFX и не смог найти в интернете способа убрать со сцены(Pane).
Убрать у MDiChild кнопки свернуть и развернуть оставить только Закрыть.
Подскажите каким образом можно реализовать что уMdiChild было только кнопка Закрыть? Какие можете.
кнопки закрыть, свернуть, развернуть
Возникла нужда убрать эти кнопки(те которыми сворачивают, разворачивают и закрывают окна) или.
Как убрать рамку (свернуть, развернуть, закрыть)
Как убрать рамку (свернуть, развернуть, закрыть) Но так, чтобы можно было перемещать окно по.
root = tk.Tk() Tk().overrideredirect(True) # убрать на форме кнопки Свернуть Развернуть Закрыть
пока ошибка
name ‘Tk’ is not defined
Добавлено через 39 минут
root.resizable(0, 0) # делает неактивной кнопку Развернуть root.attributes('-toolwindow', True) # удаляет кнопки Свернуть Развернуть, удаляет Иконку root.attributes('-disabled', True) # блокирует кнопки Свернуть Развернуть Закрыть, при их нажатии раздаётся звук root.attributes('-fullscreen', True) # делает во весь экран, кнопки Свернуть Развернуть Закрыть отсутствуют
Отсутствуют кнопки развернуть свернуть закрыть QT
Проект перекочевал с Linux qt под Windows, поле где должны быть указанные кнопки есть, а самих.
Кнопки окна (свернуть, развернуть и закрыть)
Всем привет! Помогите с VBA. Пытался найти сам, но нашел только закрыть базу, и закрыть форму.
Кнопки и окна: передвинуть, свернуть, развернуть, закрыть.
как передвинуть кнопки свернуть, развернуть, закрыть на несколько пикселов влево, и как в.
Пропали кнопки в заголовке окон (свернуть развернуть закрыть)
Пропали вот эти кнопки, после перезагрузки. Как чинить? Тема стоит стандартная
Красивая шапка Windows окна, и кнопки закрыть, свернуть, развернуть
Добрый день! Подскажите, можно ли что то сделать со стандартной шапкой Windows окна, и кнопками.
Убрать из заголовка окна кнопки «свернуть», «развернуть», «закрыть»
У класса Window есть кнопки сворачивание, раскрытие во весь экран и закрытие, так вот мне надо.
Удаление кнопок свернуть / развернуть в Tkinter
У меня есть программа на Python, которая открывает новые окна для отображения некоторой информации «о». Это окно имеет свою собственную кнопку закрытия, и я сделал его неизменяемым. Однако, кнопки, чтобы максимизировать и минимизировать это все еще там, и я хочу, чтобы они исчезли.
Я использую Tkinter, оборачивая всю информацию для отображения в классе Tk.
Код пока приведен ниже. Я знаю, что это не красиво, и я планирую расширить информацию, превращая ее в класс, но я хочу разобраться в этой проблеме, прежде чем двигаться дальше.
Кто-нибудь знает, как я могу определить, какие кнопки по умолчанию отображаются в диспетчере Windows?
def showAbout(self): if self.aboutOpen==0: self.about=Tk() self.about.title("About "+ self.programName) Label(self.about,text="%s: Version 1.0" % self.programName ,foreground='blue').pack() Label(self.about,text="By Vidar").pack() self.contact=Label(self.about,text /cdn-cgi/l/email-protection" data-cfemail="cfaeabbdaabcbc8fa8a2aea6a3e1aca0a2">[email protected]",font=("Helvetica", 10)) self.contact.pack() self.closeButton=Button(self.about, text="Close", command = lambda: self.showAbout()) self.closeButton.pack() self.about.geometry("%dx%d+%d+%d" % (175,\ 95,\ self.myParent.winfo_rootx()+self.myParent.winfo_width()/2-75,\ self.myParent.winfo_rooty()+self.myParent.winfo_height()/2-35)) self.about.resizable(0,0) self.aboutOpen=1 self.about.protocol("WM_DELETE_WINDOW", lambda: self.showAbout()) self.closeButton.focus_force() self.contact.bind('', self.contactMouseOver) self.contact.bind('', self.contactMouseOver) self.contact.bind('', self.mailAuthor) else: self.about.destroy() self.aboutOpen=0 def contactMouseOver(self,event): if event.type==str(7): self.contact.config(font=("Helvetica", 10, 'underline')) elif event.type==str(8): self.contact.config(font=("Helvetica", 10)) def mailAuthor(self,event): import webbrowser webbrowser.open('mailto:[email protected]',new=1)
5 ответов
В общем, то, какие украшения WM (оконный менеджер) решает отобразить, не может быть легко продиктовано таким инструментарием, как Tkinter. Итак, позвольте мне обобщить то, что я знаю, плюс то, что я нашел:
import Tkinter as tk root= tk.Tk() root.title("wm min/max") # this removes the maximize button root.resizable(0,0) # # if on MS Windows, this might do the trick, # # but I wouldn't know: # root.attributes(toolwindow=1) # # for no window manager decorations at all: # root.overrideredirect(1) # # useful for something like a splash screen root.mainloop()
Существует также возможность того, что для Toplevel кроме окна root, вы можете сделать:
и это удалит кнопки min/max, но это также зависит от оконного менеджера. Из того, что я прочитал, MS Windows WM действительно удаляет их.
from tkinter import * qw=Tk() qw.resizable(0,0) #will disable max/min tab of window qw.mainloop()
from tkinter import * qw=Tk() qw.overrideredirect(1) # will remove the top badge of window qw.mainloop()
Вот два способа отключить максимизацию и минимизировать опцию в tkinter
помните, что код для кнопки, показанный на рисунке, не приведен в качестве примера, так как это решение относительно того, как сделать вкладку max/min неработоспособной или как удалить
Windows
Для окон вы можете использовать атрибут -toolwindow следующим образом:
root.attributes('-toolwindow', True)
Итак, если вам нужен полный код, это
from tkinter import * from tkinter import ttk root = Tk() root.attributes('-toolwindow', True) root.mainloop()
Другие атрибуты window.attributes:
-alpha -transparentcolor -disabled -fullscreen -toolwindow -topmost
Важное примечание: это работает только с Windows. Не MacOS
Mac
В Mac вы можете использовать атрибут overredirect и кнопку «x», чтобы закрыть окно, и это сделает свою работу.:D вот так:
from tkinter import * from tkinter import ttk window = Tk() window.overredirect(True) Button(window, text="x", command=window.destroy).pack() window.mainloop()
У меня работает, у меня windows 7.
Прокомментируйте меня, если у меня есть ошибка.
Я объединил ответы от @demyaN и других, и следующий способ выполнить работу.
import ctypes as ct from tkinter import * def setWinStyle(root): set_window_pos = ct.windll.user32.SetWindowPos set_window_long = ct.windll.user32.SetWindowLongPtrW get_window_long = ct.windll.user32.GetWindowLongPtrW get_parent = ct.windll.user32.GetParent # Identifiers gwl_style = -16 ws_minimizebox = 131072 ws_maximizebox = 65536 swp_nozorder = 4 swp_nomove = 2 swp_nosize = 1 swp_framechanged = 32 hwnd = get_parent(root.winfo_id()) old_style = get_window_long(hwnd, gwl_style) # Get the style new_style = old_style & ~ ws_maximizebox & ~ ws_minimizebox # New style, without max/min buttons set_window_long(hwnd, gwl_style, new_style) # Apply the new style set_window_pos(hwnd, 0, 0, 0, 0, 0, swp_nomove | swp_nosize | swp_nozorder | swp_framechanged) # Updates window = Tk() Button(window, text="button").pack() # add your widgets here. window.after(10, lambda: setWinStyle(window)) #call to change style after the mainloop started. Directly call setWinStyle will not work. window.mainloop()
Кстати, с помощью window.attributes(‘-toolwindow’, True) удалит окна свертывания и развертывания, но приложение не будет отображаться на панели задач, что для меня является проблемой.
Удаление кнопок свертывания/разворачивания с помощью ctypes
import ctypes as ct set_window_pos = ct.windll.user32.SetWindowPos set_window_long = ct.windll.user32.SetWindowLongPtrW get_window_long = ct.windll.user32.GetWindowLongPtrW get_parent = ct.windll.user32.GetParent # Identifiers gwl_style = -16 ws_minimizebox = 131072 ws_maximizebox = 65536 swp_nozorder = 4 swp_nomove = 2 swp_nosize = 1 swp_framechanged = 32 hwnd = get_parent(settings_panel.winfo_id()) # Get the style old_style = get_window_long(hwnd, gwl_style) # New style, without max/min buttons new_style = old_style & ~ ws_maximizebox & ~ ws_minimizebox # Apply the new style set_window_long(hwnd, gwl_style, new_style) # Updates set_window_pos(hwnd, 0, 0, 0, 0, 0, swp_nomove | swp_nosize | swp_nozorder | swp_framechanged)