Возвращаемое значение пути файла Excel в PyGtk - PullRequest
0 голосов
/ 16 апреля 2019

Я не могу сохранить значение, возвращаемое функцией для виджета кнопки .connect, в переменной, чтобы использовать ее в моей основной программе.

Я использую PyGtk 3+ в Python 3.4 Мне нужно вернуть значение из этой программы, чтобызагрузить другие значения и выполнить расчеты.

   button = Gtk.Button("Brwose File")
   button.connect("clicked",self.test2)  
   def test2(self,widget,mylist1,clicked):
        dialog = Gtk.FileChooserDialog("Please choose a file", None,
                                   Gtk.FileChooserAction.OPEN,
                                   (Gtk.STOCK_CANCEL, 
                                    Gtk.ResponseType.CANCEL,
                                    Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) 
       response = dialog.run()
       if response == Gtk.ResponseType.OK:
           print("Open clicked")
           a = dialog.get_filename()  

       wb = xlrd.open_workbook(a)
       sheet = wb.sheet_by_index(0)
       ncols = sheet.ncols
       print(ncols)
       nrows = sheet.nrows
       print(nrows)
       clicked.append(1)
       print(clicked)
       mylist = []
       for i in range(sheet.nrows):
           data = sheet.row_values(i)
           mylist1.append(data)
       return (mylist1)

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Спасибо!Это лучшее решение.Вот мой обновленный код:

def on_browse_clicked(self, widget):
    """Creates dialogue box to choose file for loading data when browse button is clicked"""

    dialog = Gtk.FileChooserDialog("Please choose a file", None,
                                   Gtk.FileChooserAction.OPEN,
                                   (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                                    Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
    response = dialog.run()
    if response == Gtk.ResponseType.OK:
        print("Open clicked")
        global file
        file = dialog.get_filename()
        dialog.destroy()
        self.browse_entry.set_text(file)
        wb = xlrd.open_workbook(file)
        sheet = wb.sheet_by_index(0)
        for i in range(1, sheet.nrows):
            data = sheet.row_values(i)
            print(data)
            self.production_data_list_store.append(data)

    else:
        dialog.destroy()
0 голосов
/ 25 апреля 2019

Это невозможно из-за того, как работает цикл обработки событий.Но так как вы работаете с классом, вы можете просто использовать переменную экземпляра.Упрощенно:

class MyApp:
    def __init__(self):
        ...
        self.my_var = None
        button = Gtk.Button()
        button.connect("clicked", self.on_button_clicked)

    def on_button_clicked(self, widget):
        ...
        self.my_var = "something"

В этот момент используйте self.my_var где-нибудь еще в классе.

...