如何使用tkinter绑定按钮和对话框?

时间:2016-04-08 08:23:12

标签: python user-interface button tkinter bind

我试图用tkinter创建一个Python GUI。任何人都可以告诉我如何做到以下几点:

  1. 将“打开”按钮放在屏幕的右上角
  2. 如何结合我的" Open"按钮打开一个对话框,用户可以在其中选择要打开的文件?
  3. 将标签放在“打开”按钮下 - 我所能做的就是将它们放在根的根部或右边的顶部
  4. 我是否需要使用画布和框架??
  5. 如何将鼠标点击(x,y坐标)发送/显示到标签而不是我的控制台?
  6. 我的代码如下:

    from tkinter import *
    
    def clicks(event):                          
        print(event.x, event.y)                 
        xy_coord = "x=%d y=%d" % (event.x, event.y)
        return xy_coord
    
    myroot = Tk()                               
    
    label = Label(myroot, text="Co-ord: ", fg="black")  
    label.pack(side=TOP)                        
    
    myFilename = filedialog.askopenfilename(filetypes = ( ("how code files", "*.hc"), ("All Files", "*.*") ) ) 
    print(myFilename)
    
    button = Button(myroot, text="Open file: ", fg="Blue") 
    button.bind("<Button>", click)
    button.pack(side=RIGHT, padx=5, pady=5)     
    
    frame = Frame(myroot, bg="Grey", width=300, height=300) 
    frame.bind("<Button>", clicks)              
    frame.pack(expand=YES, fill=BOTH)           
    
    myroot.mainloop()                           
    

1 个答案:

答案 0 :(得分:0)

  1. 我建议您使用Grid insted of pack,它可以让您更好地控制您的设计。在网格中,您可以将按钮添加到左栏(我不知道您将拥有多少列。如果您有三列,则将按钮添加到第三列)并且您可以使用

    openButton.grid(column=3, sticky=E)
    
  2. 表示您的按钮将粘贴到列的东侧。您还可以使用N,E,W,S或EW等组合来扩展按钮。

    1. 为打开按钮编写一个事件,以便选择一个用于选择文件的对话框。

      def browse(event):
          myFilename = filedialog.askopenfilename(filetypes = ( ("how code files", "*.hc"), ("All Files", "*.*") ) )
      
      openButton.bind("<Button-1>", browse)
      
    2. 之后,您可以使用文件路径myFilename打开文件。

      1. 再次,如果您使用网格系统,您可以将打开按钮放在第一行和第三列,并标记到第二行和第三列。代码将与此类似

        openButton.grid(row=1, column=3 sticky=E)
        
        label = Label(myroot).grid(row=2, column=3 sticky=E)
        
      2. 除非你想绘画,否则你不需要画布。

      3. 您可以使用.config更新Tkinter中的标签文字。

        def clicks(event):                                         
            xy_coord = "x=%d y=%d" % (event.x, event.y)
            label.config(text= xy_coord)