2017-07-18 89 views
0

如何打开Tkinter窗口(例如条目,文本等),并在打开时让它们出现在屏幕上而不是开始最小化? 我真的不知道如何开始......我有一些窗户,但他们打开最小化。我在互联网上搜索,但没有发现任何可能相关的东西。我该怎么做 ? 在windows上使用python(Python 3和Python 2) 感谢您的帮助!如何使Tkinter窗口在打开时显示而不是开始最小化?

编辑:现在的问题,因为我在这里的评论中提到的是,我必须强制显示窗口。但是当我这样做的时候,即使我使用一个函数来集中它以前工作的,窗口也不会开始居中。

代码:

def center(toplevel): 
    toplevel.update_idletasks() 
    w = toplevel.winfo_screenwidth() 
    h = toplevel.winfo_screenheight() 
    size = tuple(int(_) for _ in toplevel.geometry().split('+')[0].split('x')) 
    x = w/2 - size[0]/2 
    y = h/2 - size[1]/2 
    toplevel.geometry("%dx%d+%d+%d" % (size + (x, y))) 


def paste_func(): 
    global text_box 
    text_box.insert(END, top.clipboard_get()) 
    button_pressed() 


def button_pressed(x=0): 
    # This function determines which button was pressed, and closes this menu/message box/etc... 
    global pressed 
    pressed = x 
    destroy_top() 


def destroy_top(): 
    # This function closes this menu/message box/etc... 
    global top 
    top.iconify() 
    top.withdraw() 
    top.quit() 

def get_text(): 
    global pressed 
    global top 
    global text_box 

    pressed = 0 
    top = Tk() 
    top.withdraw() 
    top.rowconfigure(0, weight=0) 
    top.columnconfigure(0, weight=0) 
    top.config(height=0, width=0) 
    top.protocol('WM_DELETE_WINDOW', lambda: button_pressed(-1)) 

    text_box = Entry(top, width=50) 
    text_box.focus_set() 
    text_box.grid(row=0, column=0) 
    but = Button(top, text='Enter', command=button_pressed) 
    but.grid(row=0, column=1) 
    paste = Button(top, text='Paste', command=paste_func) 
    paste.grid(row=0, column=2) 

    top.deiconify() 
    text_box.focus_set() 
    top.after(0, top.focus_force()) 
    center(top) 
    top.mainloop() 

    if pressed == -1: 
     exit() 

    return text_box.get('1.0', index2=END) 
+0

让我们看看您的代码,我们可能会更好地理解,通常Windows并未创建为最小化。 – Max

+0

Windows始终以非最小化状态启动。你必须明确地将它们最小化。你能否提供[mcve]来说明问题。 –

+0

这是一个完全不同的问题,而不是我回答的问题。 – Dan

回答

1

window.focus_force() method做到这一点:

强制输入焦点的部件。这是不礼貌的。最好等待窗口经理给你关注。请参阅下面的.grab_set_global()

有时候,如果这不起作用,你可以手动强制它像这样:

from Tkinter import * 

window = Tk() 
window.after(2000, window.focus_force) 
window.mainloop() 

有时候你会有issues on Macs which can require some additional finagling但这应该做工精细别处(OP尚未指定有关环境的任何信息) 。

+0

谢谢!作品像魅力 – Lidor

+0

@BryanOakley好点。它需要一个回调,我习惯于想传递它的参数,所以我使用lambda来做到这一点。在这种情况下,不需要,因为没有参数。编辑回答 – Dan

+0

原谅我高手!我想我知道为什么会出现这个问题,这是因为我使用了撤销和解密。但现在我又遇到了另外一个问题,我怎样才能使用退出,什么时候需要使用deiconify,打开窗口并让它出现在屏幕上?由于某种原因,如果我让它出现在屏幕上,就像你做的那样,它不会打开居中......(早些时候它已经) – Lidor

相关问题