2个python GUI之间的通信

时间:2017-07-11 05:17:22

标签: python user-interface tkinter subprocess

在文件2中,用户将输入一个值,我希望该值在1个文件中使用。另外,我想创建一个函数来检查文件2,如果文件2丢失,文件1应该独立地获得默认值。 如果我将文件转换为exe,这也可以工作,我尝试使用os.path.exists(“路径”),但我希望它是路径独立的,任何建议?

from tkinter import *


multiplier = Tk()
multiplier.config(background="BLACK")
multiplier.geometry("400x400")
multiplier.wm_title("Multiplier Selector")
label1 = Label(multiplier, text="Select the Appropriate Multiplier", bg="BLACK", fg="WHITE", font="Times 14 bold")
label1.place(relx=0.1,rely=0.1)
a = StringVar()
x2 = Radiobutton (multiplier, text="x2", font="Times 14 bold", bg="BLACK", fg="WHITE", value=1,command=lambda:a.set("2"),selectcolor="BLACK")
x4 = Radiobutton (multiplier, text="x4", font="times 14 bold", bg="BLACK", fg="WHITE", value=2, command=lambda:a.set("4"), selectcolor="BLACK")
x6 = Radiobutton (multiplier, text="x6", font="Times 14 bold", bg="BLACK", fg="WHITE", value=3, command=lambda:a.set("6"), selectcolor="BLACK")
button = Button (multiplier, text="value of a", fg="White", bg="BLACK", command=lambda:print (a.get()))
button.place(relx=0.5, rely=0.5)
x2.place(relx=0.1, rely=0.3)
x4.place(relx=0.1, rely=0.5)
x6.place(relx=0.1,rely=0.7)

multiplier.mainloop()

file_2

from tkinter import*
from tkinter import messagebox
from file_3 import abc
def raise_frame(Frame):
  Frame.tkraise()

def on():
  if a2.get()=="" or a3.get()=="" or a4.get()=="" or a5.get()=="" or a6.get()=="" :
   messagebox.showerror("Error", "Empty Field")

 else:
    a = float(a1.get()) * 10000000000
    b = float(a2.get()) * 1000000000
    c = float(a3.get()) * 1000000
    d = float(a4.get()) * 1000
    e = float(a5.get())
    f = float(a6.get()) / 1000
    h = float(abc.get())
    g = float((a + b + c + d + e + f)/h)
     setframepowergreen.lift()
     print(g)

1 个答案:

答案 0 :(得分:-1)

不幸的是,我无法提供太多帮助,因为这个问题很模糊。但据我所知,您希望将数据从一个文件传递到另一个文件。

对于类,当您从第二个文件调用类/函数时,可以将self作为参数传递。然后使用该参数设置变量:

##### file_a.py #####
from file_b import B

class A:
    def __init__(self):
        b_object = B(self)
        print(self.varFromFileB)

A()

##### file_b.py #####
class B:
    def __init__(self, a):
        var = 'this variable from file_b gets passed to file_a'
        a.varFromFileB = var

使用函数,您可以从第二个文件调用函数/类并将变量设置为其返回值:

##### file_a.py #####
from file_b import B

def A():
    varFromFileB = B()
    print(varFromFileB)

A()

##### file_b.py #####
def B():
    var = 'this variable from file_b gets passed to file_a'
    return var

如果整个应用程序不是太大,可以通过将所有代码保存在一个文件中来避免这些导入。从那里,您可以使用上面的两种方法,或者将所有内容放在一个类/函数中,以使事情变得更容易。

将应用程序转换为可执行文件不应更改任何内容。它将为您处理所有导入和依赖。