2011-11-01 4 views
26

Как получить рамку в Tkinter для отображения в полноэкранном режиме? ? ? Я видел этот код, это очень полезно,Показать полноэкранный режим на Tkinter

>>> import Tkinter 
>>> root = Tkinter.Tk() 
>>> root.overrideredirect(True) 
>>> root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight())) 

, но это то, что возможно, когда я ударил Esc, что автоматически «» Восстановить вниз «» окно? Наверное, это очень сложный код, справка pls.

ответ

18

Это создает полноэкранное окно. Нажатие Escape по умолчанию изменяет размер окна до «200x200 + 0 + 0». Если вы перемещаете или изменяете размер окна, Escape переключает между текущей геометрией и предыдущей геометрией.

import Tkinter as tk 

class FullScreenApp(object): 
    def __init__(self, master, **kwargs): 
     self.master=master 
     pad=3 
     self._geom='200x200+0+0' 
     master.geometry("{0}x{1}+0+0".format(
      master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad)) 
     master.bind('<Escape>',self.toggle_geom)    
    def toggle_geom(self,event): 
     geom=self.master.winfo_geometry() 
     print(geom,self._geom) 
     self.master.geometry(self._geom) 
     self._geom=geom 

root=tk.Tk() 
app=FullScreenApp(root) 
root.mainloop() 
+2

note: с 'root.overrideredirect (True)' '' не называет ничего на моей машине (Ubuntu). Без 'root.overrideredirect' отображается строка заголовка. – jfs

+1

Это не работает для меня. Единственное, что он делает, это максимизировать окно. – exhuma

+2

Это не полноэкранный, а максимизированный ... не совсем то же самое, для полного полноэкранного просмотра, см. Ответ от @Shule – dm76

47

Я думаю, что это то, что вы ищете:

Tk.attributes("-fullscreen", True) # substitute `Tk` for whatever your `Tk()` object is called 

Вы можете использовать wm_attributes вместо attributes тоже.

Тогда просто привязать ключ побег и добавьте в обработчик:

Tk.attributes("-fullscreen", False) 

ответ на другой вопрос, намекал на это (с wm_attributes). Итак, вот как я узнал. Но никто не сразу вышел и сказал, что это был ответ по какой-то причине. Итак, я понял, что стоит опубликовать.

Вот рабочий пример (проверено на Xubuntu 14.04), который использует F11, чтобы перейти в полноэкранный режим включения и выключения и где побег выключит его только:

import sys 
if sys.version_info[0] == 2: # Just checking your Python version to import Tkinter properly. 
    from Tkinter import * 
else: 
    from tkinter import * 


class Fullscreen_Window: 

    def __init__(self): 
     self.tk = Tk() 
     self.tk.attributes('-zoomed', True) # This just maximizes it so we can see the window. It's nothing to do with fullscreen. 
     self.frame = Frame(self.tk) 
     self.frame.pack() 
     self.state = False 
     self.tk.bind("<F11>", self.toggle_fullscreen) 
     self.tk.bind("<Escape>", self.end_fullscreen) 

    def toggle_fullscreen(self, event=None): 
     self.state = not self.state # Just toggling the boolean 
     self.tk.attributes("-fullscreen", self.state) 
     return "break" 

    def end_fullscreen(self, event=None): 
     self.state = False 
     self.tk.attributes("-fullscreen", False) 
     return "break" 

if __name__ == '__main__': 
    w = Fullscreen_Window() 
    w.tk.mainloop() 

Если вы хотите, чтобы скрыть меню тоже есть только два пути, которые я нашел для этого. Один из них - уничтожить его. Другой - сделать пустое меню для переключения между ними.

self.tk.config(menu=self.blank_menu) # self.blank_menu is a Menu object 

Затем верните его в свое меню, когда вы хотите, чтобы он снова появился.

self.tk.config(menu=self.menu) # self.menu is your menu. 
+2

Почему вы вручную используете 'w.tk.destroy'? Я никогда раньше не видел этого в приложении Python Tk. – exhuma

+1

@exhuma (я не видел твой комментарий до сих пор по какой-то причине.) Хороший вопрос. Спасибо что подметил это. Здесь нет необходимости. Я думаю, что я видел, как кто-то другой это делал, когда я начинал программирование Tkinter, и я продолжал его, не задумываясь об этом. Однако, возможно, была причина в том, что в какой-то программе или другой программе я программировал один раз, но я не знаю, в чем причина. В любом случае это не повредит казни, но я отредактирую его из кода здесь и поставлю mainloop вне конструктора. – Shule

+2

@exhuma Я нашел причину этого. По-видимому, некоторые среды разработки работают без него (хотя вам, похоже, это не нужно в обычной среде Python). Эта ссылка содержит пример кода и объяснение: http://effbot.org/tkinterbook/tkinter-hello-again.htm – Shule

6

Я думаю, что если вы ищете полноэкранном режиме только, нет необходимости устанавливать геометрию или MAXSIZE т.д.

Вам просто нужно сделать это:

-Если вы работаете на убунту:

root=tk.Tk() 
root.attributes('-zoomed', True) 

-И если вы работаете на окнах:

root.state('zoomed') 

Теперь для переключения между полноэкранным, для минимизации его панель задач можно использовать:

Root.iconify() 
4

Это позволит создать полностью полноэкранное окно на макинтош (без видимой строки меню), не портя сочетания клавиш

import tkinter as tk 
root = tk.Tk() 

root.overrideredirect(True) 
root.overrideredirect(False) 
root.attributes('-fullscreen',True) 


root.mainloop() 
Смежные вопросы