2015-12-04 6 views
1

Я пишу этот скрипт python, который в основном устанавливает фоновый фон ваших окон через ссылки reddit и определенные переменные, которые вы устанавливаете, например, ссылки из hot/top all time/etc , и я пишу GUI с PySide для него, в настоящее время у меня есть 3 файла.Python и PySide: переменные значения сбрасываются при вызове функций из другого файла

  • Файл щ порождена QtDesigner output_ui.py

  • Еще один файл, который взаимодействует с генерируемым Ui файл output.py

  • и сценарий, который работает все и устанавливает обои WallDit.py

Когда я запустил файл output.py, задайте значения внутри GUI все w orks правильно, значения устанавливаются в порядке, но когда я нажимаю кнопку запуска и выполняется скрипт (WallDit.py) и вызывает функции из output.py, значения переменных возвращаются к значениям по умолчанию (т. i установлен в «Обои», он возвращается к умолчанию «Обои + Обои».

Например, когда я эта функция вызывается из 1-го файла, значение текста subreddit линия получает набор обратно по умолчанию, не тот, который на самом деле отображается на графическом интерфейсе:

def handle_subreddit_line(self): 
    print("subreddit line in output.py: " + self.subreddit_line.text()) 
    return self.subreddit_line.text() 

Вызов кода функции:

def get_subreddit_name(): 
    test = MainWindow() 
    print("test: " + test.handle_subreddit_line()) 
    subreddit = MainWindow().handle_subreddit_line() 
    return subreddit 

Примечание: при изменении значения, скажем, в subreddit_name линии сигнал отсылается и правильные выходы значение, проблема начинается тогда, когда функция вызывается из 1-го файла.

Update: Если я вызвать функцию в любом месте, то значение по-прежнему получает сброс по умолчанию

def handle_start_btn(self): 
    if self.start_btn.isDown: 
     print("Button pressed") 
    print("inside function: " + MainWindow().handle_subreddit_line()) 
    import WallDit 

ответ

1

В WallDit.py, инициализации ПЯТИ новых окон. Это означает, что у вас есть пять новых текстовых полей. Чтобы исправить вашу проблему, вам нужно использовать один экземпляр, который вы создаете в output.py. Например, вы можете удалить main() в WallDit.py, сделать set_wallpaper и другие функции принимают window аргумент, и сделать что-то вроде этого:

def handle_start_btn(self): 
    WallDit.set_wallpaper(self) 

(переместить import строку в верхней части файла, так как WallDit не будет выполнять ничего на импорт сейчас, и это хорошая практика, чтобы держать весь импорт там)

редактировать: конечно, вы должны пройти window вокруг и использовать его вместо MainWindow().

 Смежные вопросы

  • Нет связанных вопросов^_^