Tkinter:是否可以将Tkinter窗口打开?

时间:2018-04-03 19:55:14

标签: python python-2.7 tkinter

就像标题所说,是否可以在关闭时打开Tk窗口?与关闭浏览器窗口的方式类似,如果您打开一个新窗口,它将在您关闭它的最后位置打开。我用这行代码重启我的程序:

python = sys.executable
os.execl(python, python, * sys.argv)

但不是重置窗口位置,我希望它保持在关闭的位置。

我意识到我可以将窗口位置设置为我希望通过窗口的几何形状打开的位置,但是由于程序在不同的计算机上使用,一些显示器比其他计算机更多,所以它非常麻烦使屏幕位置正确。

编辑: 我似乎无法得到它,这是它关闭并重新启动我的程序的代码。

def copyandclose():
    all_stuff = listbox.get(0, END)
    all_stuff_list = list(all_stuff)
    for i in all_stuff_list:
        master.clipboard_append(i + '\n')
        file = open('something.txt', 'a')
        file.write(i + '\n')
    file.write('\n' + '-----------' + '\n\n')
    file.close()
    python = sys.executable
    os.execl(python, python, * sys.argv)

在里面我会添加代码来更新窗口几何体,或者在创建窗口之后立即获取窗口的位置会更容易,然后在窗口移动时更新它。如果是这样我将如何做到

这是我的计划的开始

from Tkinter import *
import sys, os

#Main Windows Settings
master = Tk()
master.geometry("700x270+953+525")
master.title(string="My Program")
frame = Frame(master)

#Sets background to grey18
label = Label(master, bg="grey18", width=700, height=270)
label.place(x=0, y=0)

1 个答案:

答案 0 :(得分:0)

这是我在评论中做的事情的一个简短例子。配置文件(如果存在)仅包含所谓的Tkinter geometry string,否则使用默认值。它假定配置文件与脚本本身位于同一目录中。

在应用程序在copyandclose()函数中重新启动之前,它会通过将当前几何字符串写入其中来更新(或创建)此文件。

import os
import sys
from Tkinter import *

CONFIG_FILE_NAME = "my_config.txt"
CONFIG_FILE_PATH = os.path.join(os.path.dirname(__file__), CONFIG_FILE_NAME)
DEFAULT_GEOMETRY = "700x270+953+525"

def copyandclose():
    # Update / create configuration file.
    with open(CONFIG_FILE_PATH, "wt") as file:
        file.write(master.winfo_geometry() + '\n')
    # Restart application.
    os.execl(sys.executable,
             '"%s"' % __file__,
             '"%s"' % os.path.basename(__file__))

# Try to read config file.
try:
    with open(CONFIG_FILE_PATH, "rt") as file:
        line = next(file)  # Read first line.
        geometry = line.rstrip('\n')  # Remove trailing newline.
except IOError:
    geometry = DEFAULT_GEOMETRY


master = Tk()
master.geometry(geometry)
master.title(string="My Program")
frame = Frame(master)

label = Label(master, bg="grey18", width=700, height=270)
label.place(x=0, y=0)

button = Button(master, text="Copy and close", anchor=S, command=copyandclose)
button.place(relx=0.5, rely=0.5, anchor=CENTER)
master.mainloop()