首頁  >  問答  >  主體

python - 【:-D Tkinter 中 withdraw的正确使用姿势

如何实现点击button之后 显示一个新的窗口并且使button那个窗口直接消失
先贴上代码

    #coding:utf-8
    import Tkinter as tk
    from Tkinter import *
    import tkMessageBox
  
   
    root = tk.Tk()
    root.title('Test')
    e = StringVar()
  
  
    def callback():
         #tkMessageBox.showinfo('title','hello world')
          entry = Entry(root,textvariable = e)
          e.set('请输入')
          entry.pack()
 
  
    def bnt():
          Button(root,text = '确认使用',fg='red',bd = 2,width =28,
          command = callback).pack()
          root.withdraw()
    bnt()
    root.mainloop()
    

但比较蛋疼的是。。用了withdraw之后button窗口就直接匿了。。。点都点不了

伊谢尔伦伊谢尔伦2742 天前1032

全部回覆(1)我來回復

  • 迷茫

    迷茫2017-04-17 17:35:00

    同shomy,很少用Tkinter,寫了一個PyQt4版本的,你可以試試,親測運行沒問題

    # coding:utf-8
    
    from PyQt4.QtGui import *
    
    # 点击后需要显示的窗口
    class Window(QWidget):
        def __init__(self, parent=None):
            super(Window, self).__init__(parent)
            self.resize(400, 200)
            self.setWindowTitle("I am the new Window")
    
        def handleTrigger(self):
            # 如果当前为隐藏状态,则显示
            if not self.isVisible():
                self.show()
    
    # 按钮
    class Btn(QToolButton):
    
        def __init__(self, parent=None):
            super(Btn, self).__init__(parent)
            self.resize(300, 100)
    
        def handleClick(self):
            # 如果当前为显示状态,则隐藏
            if self.isVisible():
                self.hide()
    
    
    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
        b = Btn()
        w = Window()
        # 窗口初始化为隐藏
        w.hide()
        # 点击时,触发新窗口的handleTrigger事件
        b.clicked.connect(w.handleTrigger)
        # 点击时,触发Button自己的handleClick事件
        b.clicked.connect(b.handleClick)
        b.show()
        app.exec_()
        

    PS: 如果沒什麼特別的要求,推薦用PyQt4/PyQt5進行開發,原因:
    1) 借助於Qt的強大類別庫,PyQt可以做很多事情,比如圖形的繪製、XML解析、網絡編程、數據庫的讀取寫作等,也就是說PyQt不單單是一個GUI庫,還包括非GUI的部分。
    2) 借助Qt Designer,你可以對圖形介面部分進行拖曳式的開發,效率非常高。
    3) 強大的社群支持,例如有一款Python IDE就是基於PyQt做的開發,這個在開源社群裡的流行程度比Tkinter目前看起來是強大些的。

    回覆
    0
  • 取消回覆