<p>我事先没有把我的计划安排得很清楚,我现在就试着解释一下。在</p>
<p>我所拥有的是我的主窗口,在我的主窗口(称为“应用程序”)中,我设置了一个菜单栏。此菜单栏有一个称为“选项”的级联和一个名为“PromptPreConfig”的命令:</p>
<pre><code>app = Tk()
filemenu.add_command(label="Configure IP", command = PromptIpReconfig)
filemenu.add_command(label="Quit", command=app.destroy)
menubar.add_cascade(label='Options',menu = filemenu)
</code></pre>
<p>当我调用函数“promptPreConfig”时,会发生以下情况:</p>
^{pr2}$
<p>如果用户决定说“是”,则调用<code>IpConfigNew()</code>:</p>
<pre><code>#CONFIGURE NEW IP
def IpConfigNew():
IpConfig = Tk()
IpConfig.configure(background = 'white')
IpConfig.title('Configure IP')
IpConfig.geometry('300x60+260+380')
IpNew = StringVar()
Label(IpConfig, font = ('Helvetica',12), text = 'Please enter the IP address of the server', bg = 'white').place(x=0,y=4)
Entry(IpConfig,textvariable=IpNew, bg = "light blue").place(x=4,y=35)
#Store New Ip
def IpStore():
GetIpNew = IpNew.get()
mypath = str('Latest Server')
if not os.path.isdir(mypath):
os.makedirs(mypath)
StoreLatestServer = open('Latest Server\NewIp.txt', 'w')
StoreLatestServer.write("%s"%(GetIpNew))
StoreLatestServer.close()
IpConfig.destroy()
Button(IpConfig,text = 'Done', command = IpStore).place(x=150,y=30)
IpConfig.mainloop()
</code></pre>
<p>ipconfig在主窗口中打开子窗口<code>IpConfig = Tk()</code>。子窗口提供了一个在输入新IP后单击的按钮。单击按钮后,它将调用命令“IpStore”:</p>
<pre><code>#Store New Ip
def IpStore():
GetIpNew = IpNew.get()
mypath = str('Latest Server')
if not os.path.isdir(mypath):
os.makedirs(mypath)
StoreLatestServer = open('Latest Server\NewIp.txt', 'w')
StoreLatestServer.write("%s"%(GetIpNew))
StoreLatestServer.close()
IpConfig.destroy()
</code></pre>
<p>基本上,我的程序总体布局如下:</p>
<pre><code>from Tkinter import *
import os
import tkMessageBox
#Create parent window
app = Tk()
def IpConfigNew():
#Creates new window
IpConfig = Tk()
IpNew = StringVar()
Label(IpConfig, font = ('Helvetica',12), text = 'Please enter the IP address of the server', bg = 'white').place(x=0,y=4)
#Creates box for user to type IP in.
Entry(IpConfig,textvariable=IpNew, bg = "light blue").place(x=4,y=35)
#Store New Ip NOTE that it is nested within IpConfigNew
def IpStore():
#Retrieves new IP from text box and stores it in variable
GetIpNew = IpNew.get()
mypath = str('Latest Server')
#Creates directory to write new IP to.
if not os.path.isdir(mypath):
os.makedirs(mypath)
StoreLatestServer = open('Latest Server\NewIp.txt', 'w')
#Writes new IP
StoreLatestServer.write("%s"%(GetIpNew))
StoreLatestServer.close()
IpConfig.destroy()#Closes window
#Calls on function IpStore in order to store the new IP
Button(IpConfig,text = 'Done', command = IpStore).place(x=150,y=30)
IpConfig.mainloop()
def PromptIpReconfig():
confirm = tkMessageBox.askyesno(title = "Configure Server IP", message = "Are you sure?")
if confirm >0:
#In the case that the user says yes
IpConfigNew()
else:
return
#Create menu bar
filemenu.add_command(label="Configure IP", command = PromptIpReconfig)
filemenu.add_command(label="Quit", command=app.destroy)
menubar.add_cascade(label='Options',menu = filemenu)
app.mainloop()
</code></pre>
<p>我很确定问题出在ipconfig函数上,因为这似乎是有效的:</p>
<pre><code>from Tkinter import *
import tkMessageBox
import os
#Creates new window
IpConfig = Tk()
IpNew = StringVar()
Label(IpConfig, font = ('Helvetica',12), text = 'Please enter the IP address of the server', bg = 'white').place(x=0,y=4)
#Creates box for user to type IP in.
Entry(IpConfig,textvariable=IpNew, bg = "light blue").place(x=4,y=35)
#Store New Ip NOTE that it is nested within IpConfigNew
def IpStore():
#Retrieves new IP from text box and stores it in variable
GetIpNew = IpNew.get()
mypath = str('Latest Server')
#Creates directory to write new IP to.
if not os.path.isdir(mypath):
os.makedirs(mypath)
StoreLatestServer = open('Latest Server\NewIp.txt', 'w')
#Writes new IP
StoreLatestServer.write("%s"%(GetIpNew))
StoreLatestServer.close()
IpConfig.destroy()#Closes window
#Calls on function IpStore in order to store the new IP
Button(IpConfig,text = 'Done', command = IpStore).place(x=150,y=30)
IpConfig.mainloop()
</code></pre>
<p>这会让你们更清楚地了解我在处理什么。
谢谢</p>