python tkinter 弹窗_Python:tkinter-Parent获取弹出窗口的返回值
獲取窗口對象的返回值是一個很常見的模型,比如程序彈出一個窗口,讀取用戶的輸入值,這個值可以很容易的保存在彈出的窗口中,但問題在于如何將這個值傳遞給彈出窗口的parent。這是一個看似很simple的問題,但真正操作起來才發現是自己too
young~~~
******************************************************************************************************
先簡單的描述需要解決一個什么問題,下面只是一個框架:
它運行的結果如下:
點擊Enter,會彈出窗口如下:
OK,問題就是在這里輸入后,將這個輸入的值傳遞給調用它的主程序。
*******************************************************************************************************
為了解決這個問題,首先需要明白一個概念:所有獨立運行的窗口(Toplevel
widget),都是一個獨立的線程。
為了使這個概念更加的明顯,將整個彈出窗口封裝成一個類型,然后在主窗口中點擊Enter時,創建這個窗口,代碼如下:
這里將創建Toplevel窗口的代碼封裝在了一個類型PopUp中,為了說明"所有獨立運行的窗口(Toplevel
widget),都是一個獨立的線程"這句話,在創建PopUp后,調用tkMessageBox.showinfo()來彈出一個指示性的窗口,下面是點擊主窗口Enter鍵之后的結果:
由結果可以看出,程序不會阻塞在創建TopLevel那里,等待你完成輸入銷毀,而是直接創建一個新的線程來運行。這也是Toplevel
widget的特殊之處,一般的widget運行都需要調用.mainloop()函數。
******************************************************************************************************
所有獨立運行的窗口(Toplevel
widget),都是一個獨立的線程。這是GUI設計一個慣有的問題,它使得用戶的所有操作只能異步的進行。所以針對本文開頭所提出的問題,實現這個功能的代碼只能在PopUp類型的Button
Widget的callback函數中,弄清楚這一點就勝利了一大半。
上面已經完成了全部的框架,只剩下第30行注釋的部分,這部分代碼的功能將PopUp讀取用戶的值傳遞給Gui
*****************************************************************************************************
下面是完整的解決辦法,從Gui中傳遞一個可變的對象(這里是關鍵,想想為嘛不能傳遞string進去),然后在PopUp中記錄傳入的值,這樣這個值就保存在可變的對象中了,這里類似與C++的傳引用方法。
下面是結果:
點擊pop_up,彈出PopUp,輸入:
完成輸入后,點擊show顯示結果:
反正這一塊最重要的是需要明白為啥使用list,而不是使用string,下面這篇文章就說明了區別:
http://blog.sina.com.cn/s/blog_ac9fdc0b0101n44r.html
******************************************************************************************************
上面是利用Tkinter內置的Toplevel
Widget實現,實際上也可以創建自己的類型,唯一的區別在于自己創建的類型需要顯式的調用mainloop()函數,不過說的容易,實現起來難很多。
總結
以上是生活随笔為你收集整理的python tkinter 弹窗_Python:tkinter-Parent获取弹出窗口的返回值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬盘温度70度正常吗_读懂固态硬盘:NV
- 下一篇: python性能分析工具模块_pytho