2017-08-15 92 views
0

我有一個代碼,我有一個下拉菜單,我需要做的是當我從下拉列表中選擇一個條目(例如:發送電子郵件)並按下時,我需要這填充另一個tk窗口(子窗口)。蟒蛇孩子Tk窗口

我知道我做錯了什麼,但無法理解如何克服這一點,我一直在尋找一段時間,但我無法找到解決方案或指導如何完成這一點。

在此先感謝您的幫助!

from tkinter import * 
root = Tk() 
root.geometry("400x100") 
#======================================== 
#Entry area to enter the number 

labelmain = Label(root,text="Please enter number:") 
labelmain.pack() 
entryvar = StringVar(root) 
entrymain = Entry(root, textvariable=entryvar,width=30) 
entrymain.pack() 
#======================================== 
#Create option drop down list: 
lst = ["Save details to DB", "Send an email", "Copy format", "email",  "View report"] 
ddl = StringVar(root) 
ddl.set(lst[0]) 
option = OptionMenu(root, ddl, *lst) 
option.pack() 
#======================================== 
#Function to get the values from drop down list 
def ok(): 
    print("value is: " + ddl.get()) 
    #root.quit() 
#========================================= 
#Button to process the selection: 

btnmain = Button(root,text="Go", command=ok) 
btnmain.pack() 
#========================================= 

if ddl.get() == "Send an email": 
    samepmrdb = Tk() 
    samepmrdb.mainloop() 

root.mainloop() 
+1

你需要更具體。這段代碼做什麼與你想要的不同? –

+0

道歉Bryan,這是我在stackoverflow中的第一個問題,因此將確保將來對我的請求更具體,謝謝您的意見。 – Ayman

回答

1

在打開窗口後,您正在檢查ddl的值。正如你在你的問題中所說的,你想在按下按鈕後發生一些事情,所以你需要將這些代碼放在所述按鈕的命令下。

此外,一個tkinter應用程序應該只有一個Tk()實例和一個mainloop。當你想打開另一個窗口時,你應該使用Toplevel()

def ok(): 
    print("value is: " + ddl.get()) 
    if ddl.get() == "Send an email": 
     samepmrdb = Toplevel() 
     #now you can populate samepmrdb as you like 
+0

非常感謝您對此的幫助,這正是我想要做的! – Ayman

0

如果所有你希望做的是找到一種方法,第一tkinter窗口這一能方便地使用下面的代碼來實現上更新第二tkinter窗口選擇從OptionMenu

from tkinter import * 

class App: 
    def __init__(self, master): 
     self.master = master 
     self.top = Toplevel(master) 
     self.master.withdraw() 
     self.var = StringVar() 
     self.var.set("Example1") 
     self.option = OptionMenu(self.top, self.var, "Example1", "Example2", "Example3", "Example4") 
     self.button = Button(self.top, text="Ok", command=lambda:self.command(self.var)) 
     self.label = Label(self.master) 
     self.option.pack() 
     self.button.pack() 
     self.label.pack() 
    def command(self, var): 
     self.master.deiconify() 
     self.label.configure(text=var.get()) 
     self.label.pack() 

root = Tk() 
app = App(root) 
root.mainloop() 

這會創建一個包含OptionMenuButton小部件的Toplevel小部件。當按下時,Button小部件將從OptionMenu小部件中輸出選擇。

這種邏輯可以用於各種各樣的事情,並且將信息從一個窗口傳遞到另一個窗口相對簡單,前提是這是您的問題所要求的。

+0

你對此正確,這正是我所需要的,所以我會審查和研究這個有價值的代碼:)非常感謝你對此的幫助! – Ayman

+0

如果這回答你的問題,你能否將其標記爲接受的答案,以便其他用戶也可以從中學習呢? –