2017-01-11 6 views
0

Я только начинаю использовать tkinter, и с ним немного сложно справиться. Проверьте этот образец:Поместите путь файла в глобальную переменную из кнопки просмотра с помощью tkinter

#!/usr/bin/env python 
#-*- coding: utf-8 -*- 

import Tkinter as tk 
import tkFileDialog 

def openfile(): 
    filename = tkFileDialog.askopenfilename(title="Open file") 
    return filename 

window = tk.Tk() 
tk.Button(window, text='Browse', command=openfile).pack() 

window.mainloop() 

Я Juste создал кнопку обзора, который держать путь к файлу в переменной «имя файла» в функции OpenFile(). Как я могу поместить содержимое «filename» в переменную из функции?

Например, я хочу, чтобы положить его в переменной Р и распечатать его в терминале

def openfile(): 
    filename = tkFileDialog.askopenfilename(title="Open file") 
    return filename 

window = tk.Tk() 
tk.Button(window, text='Browse', command=openfile).pack() 

window.mainloop() 

P = "the file path in filename" 
print P 

я также хочу, чтобы поместить путь к файлу в виджете Входа(), а так же, как показано ниже, получить текст в виджете Entry в другой глобальной переменной.

Если кто-то знает, было бы хорошо.

ответ

0

Есть по крайней мере два различных способа сделать это:

1) Bundle все ваше приложение в классе, как это:

import Tkinter as tk 
import tkFileDialog 

class App(tk.Tk): 

    def __init__(self): 
     tk.Tk.__init__(self) # create window 

     self.filename = "" # variable to store filename 

     tk.Button(self, text='Browse', command=self.openfile).pack() 
     tk.Button(self, text='Print filename', command=self.printfile).pack() 

     self.spinbox = tk.Spinbox(self, from_=0, to=10) 
     self.spinbox.pack(pady=10) 
     tk.Button(self, text='Print spinbox value', command=self.printspinbox).pack() 

     self.mainloop() 

    def printspinbox(self): 
     print(self.spinbox.get()) 

    def openfile(self): 
     self.filename = tkFileDialog.askopenfilename(title="Open file") 

    def printfile(self): 
     print(self.filename) 

if __name__ == '__main__': 
    App() 

В этом случае filename является атрибутом App, поэтому он доступен из любой функции внутри класса.

2) Используйте глобальную переменную:

import Tkinter as tk 
import tkFileDialog 

def openfile(): 
    global filename 
    filename = tkFileDialog.askopenfilename(title="Open file") 

def printfile(): 
    print(filename) 

def printspinbox(): 
    print(spinbox.get()) 

window = tk.Tk() 

filename = "" # global variable 

tk.Button(window, text='Browse', command=openfile).pack() 
tk.Button(window, text='Print filename', command=printfile).pack() 

spinbox = tk.Spinbox(window, from_=0, to=10) 
spinbox.pack(pady=10) 
tk.Button(window, text='Print spinbox value', command=printspinbox).pack() 

window.mainloop() 
+0

О спасибо, это действительно помогает мне! Кстати, я хочу сделать то же самое с виджетами Spinbox, как я могу получить значение в глобальной переменной? – Biopy

+0

Для спинбокса вам не нужна глобальная переменная, просто используйте метод 'get' от spinbox (я отредактировал свой ответ, чтобы показать вам). –