【问题标题】:Python import variable from function in another scriptPython从另一个脚本中的函数导入变量
【发布时间】:2020-01-15 23:29:50
【问题描述】:

我正在做一个项目,我需要将变量 itemLink 从一个文件导入到另一个文件。该变量由一些预定义的字符串和一些您必须在 GUI 中输入的字符串组成。所有代码都有效,但我不知道如何解决这个导入问题。任何帮助将不胜感激。

主程序(GUI)

from tkinter import *
import time
import sys
import subprocess



def generate():
    global itemLink
    itemLink = "predefined_text" + itemName.get() + "predefined_tex" + itemSize.get()
    subprocess.Popen("Nastavitve.py 1", shell=True)

def GUI_start():
    window = Tk()
    window.title("Test")

    Label(window, text="Item name").grid(row=0)
    Label(window, text="Size").grid(row=1)

    global itemName
    global itemSize

    itemName = Entry(window)
    itemSize = Entry(window)

    itemName.grid(row=0, column=1)
    itemSize.grid(row=1, column=1)

    button = Button(window, text="Generate link", fg="red",command=generate)
    button.grid(row=0, column=2)


    window.mainloop()


if __name__ == '__main__':
    GUI_start()

第二个程序(存储必要的数据)

from UI import itemLink
keys = {
    "link": itemLink,
    "email": "your acount email",
    "password": "password"
}

def printLink():
    print(itemLink)
    print("end")

if __name__ == '__main__':
    printLink()

【问题讨论】:

    标签: python tkinter import


    【解决方案1】:

    所以我有两个文件来证明这一点。 test.py(itemLink 变量所在的位置)和 import_test.py,以显示导入。

    这里是 test.py:

    itemLink = 'no values'
    print(itemLink)
    def generate():
        itemLink = "predefined_text" #+ itemName.get() + "predefined_tex" + itemSize.get()
        #print(itemLink)
    
        return itemLink
    
    #we mutate the value of itemLink in the main program
    itemLink = generate()
    

    这里是 import_test.py

    from test import itemLink
    #Now we just have the modified itemLink value without having to import main function to call in the UI program.
    print(itemLink)
    

    这是调用 import_test.py 的图片:

    我这次调用main函数中的方法generate来修改itemLink的值,然后将itemLink传入下一个文件。

    如果这就是您要找的,请告诉我。

    【讨论】:

    • 感谢您的宝贵时间。如果我希望第二个程序成为主程序,这将是解决方案,但现在我必须从第一个程序调用,因为在 GUI 中输入所有信息后,此生成功能是通过按下按钮启动的。
    • 我有一个想法,如果在主程序中调用generate,那么你可以设置itemLink = generate()。然后您只需要导入 itemLink,因为它已被修改。我将更改我的解决方案以显示这一点。
    • 好的,Richard 很好,希望这能解决它。我将等待您的回复。
    • 更改没有帮助。当我输入所需的文本并按下按钮时,没有任何反应。但是,我看不到你在哪里调用 import_test.py 程序。
    • 我认为如果你在 test 中调用 import_test 会得到一个循环导入。如果你在 main 中调用 UI 以此类推。澄清一下,你想通过调用 UI 来存储稍后在程序中显示的值吗?
    【解决方案2】:

    我刚刚找到了一个解决方案,它可能不是最好的,所以如果有人有任何建议,请写在下面。现在我必须启动设置,它会在单击按钮后自动打开 UI,它会按预期在控制台中打印链接。最好我希望它反过来,以便 UI 可以打开设置并在其中存储变量。

    设置

    from UI import itemName, itemSize
    
    itemLink = "predefined" + itemName.get() + "predefined" + itemSize.get()
    
    print(itemLink)
    print("end")
    
    keys = {
        "link": itemLink,
        "email": "your acount email",
        "password": "password"
    }
    

    用户界面

    from tkinter import *
    import time
    import sys
    import subprocess
    
    def generate():
        #subprocess.Popen("Nastavitve.py 1", shell=True)
        import Settings
        time.sleep(0.1)
    
    window = Tk()
    window.title("SHOP BOT")
    window.configure(background="black")
    
    Label(window, text="Item name").grid(row=0)
    Label(window, text="Size").grid(row=1)
    
    global itemName
    global itemSize
    
    itemName = Entry(window)
    itemSize = Entry(window)
    
    itemName.grid(row=0, column=1)
    itemSize.grid(row=1, column=1)
    
    button = Button(window, text="Generate link", fg="red",command=generate)
    button.grid(row=0, column=2)
    
    window.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 2023-02-21
      • 1970-01-01
      • 2015-11-21
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多