Python 和 PySide:从另一个文件调用函数时重置变量值
Python and PySide: Variable values reset when calling functions from another file
我一直在写这个 python 脚本,它基本上通过 reddit 链接和你设置的特定变量来设置你的 windows 墙纸背景,比如来自 hot/top 所有 [=47= 的链接].我正在用 PySide 为它编写一个 GUI,目前我有 3 个文件。
QtDesigner生成的ui文件output_ui.py
与生成的ui文件交互的另一个文件output.py
以及 运行 一切并设置壁纸的脚本 WallDit.py
当我 运行 output.py 文件时,在 GUI 中设置值一切正常,值设置正常,但是当我单击开始按钮并执行脚本时(WallDit.py) 并从 output.py 调用函数,变量值被重置为默认值(即我设置为 "Wallpapers",它被设置回默认值 "Wallpaper+Wallpapers")。
例如,当我从第一个文件调用此函数时,subreddit 行文本值被设置回默认值,而不是实际显示在 GUI 上的值:
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 行,信号被发送并且输出正确的值,当从第一个文件调用函数时问题就开始了。
更新: 如果我在任何地方调用该函数,该值仍会重置为默认值
def handle_start_btn(self):
if self.start_btn.isDown:
print("Button pressed")
print("inside function: " + MainWindow().handle_subreddit_line())
import WallDit
在 WallDit.py
中,您初始化了五个新的 windows。这意味着您有五个新的文本框。为了解决您的问题,您需要使用一个实例,即您在 output.py
中创建的实例。例如,您可以删除 WallDit.py
中的 main()
,使 set_wallpaper
和其他函数采用 window
参数,并执行如下操作:
def handle_start_btn(self):
WallDit.set_wallpaper(self)
(将 import
行移到文件顶部,因为 WallDit 现在不会在导入时执行任何操作,最好将所有导入都保留在那里)
编辑:当然,您需要传递 window
并使用它来代替 MainWindow()
。
我一直在写这个 python 脚本,它基本上通过 reddit 链接和你设置的特定变量来设置你的 windows 墙纸背景,比如来自 hot/top 所有 [=47= 的链接].我正在用 PySide 为它编写一个 GUI,目前我有 3 个文件。
QtDesigner生成的ui文件output_ui.py
与生成的ui文件交互的另一个文件output.py
以及 运行 一切并设置壁纸的脚本 WallDit.py
当我 运行 output.py 文件时,在 GUI 中设置值一切正常,值设置正常,但是当我单击开始按钮并执行脚本时(WallDit.py) 并从 output.py 调用函数,变量值被重置为默认值(即我设置为 "Wallpapers",它被设置回默认值 "Wallpaper+Wallpapers")。
例如,当我从第一个文件调用此函数时,subreddit 行文本值被设置回默认值,而不是实际显示在 GUI 上的值:
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 行,信号被发送并且输出正确的值,当从第一个文件调用函数时问题就开始了。
更新: 如果我在任何地方调用该函数,该值仍会重置为默认值
def handle_start_btn(self):
if self.start_btn.isDown:
print("Button pressed")
print("inside function: " + MainWindow().handle_subreddit_line())
import WallDit
在 WallDit.py
中,您初始化了五个新的 windows。这意味着您有五个新的文本框。为了解决您的问题,您需要使用一个实例,即您在 output.py
中创建的实例。例如,您可以删除 WallDit.py
中的 main()
,使 set_wallpaper
和其他函数采用 window
参数,并执行如下操作:
def handle_start_btn(self):
WallDit.set_wallpaper(self)
(将 import
行移到文件顶部,因为 WallDit 现在不会在导入时执行任何操作,最好将所有导入都保留在那里)
编辑:当然,您需要传递 window
并使用它来代替 MainWindow()
。