【问题标题】:Communication between 2 python GUIs2个python GUI之间的通信
【发布时间】:2017-12-15 00:11:21
【问题描述】:

在文件 2 中,用户将输入一个值,我希望在 1 个文件中使用该值。另外我想创建一个函数来检查文件 2,如果文件 2 丢失,文件 1 应该独立地获得一个默认值。 如果我将文件转换为 exe,这是否也有效,我尝试使用 os.path.exists("Path"),但我希望它独立于路径,有什么建议吗?

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()

文件_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)

【问题讨论】:

  • 如果没有看到您的代码,我们无法知道,file1 和 file2 中的内容是什么?
  • 这个问题太模糊了。请编辑您的问题以提供MCVE
  • 也许您可以通过 REST 协议在它们之间进行通信。从文件 1 和文件 2 中提取用户的值,从任何一个 GUI 调用服务器与另一个进行比较并返回结果。
  • 请分享您的代码以获得更好更有效的帮助
  • 我想在另一个python脚本中导入a的值

标签: python user-interface tkinter subprocess


【解决方案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

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

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

【讨论】:

  • 我写了同样的东西,但它显示语法错误@Nelson from 3 import a
  • @VaibhavBhatia 语法错误意味着您只是输入了错误的内容。发布您的代码,我可以提供帮助。
  • @VaibhavBhatia 我仍然强烈建议您发布一些代码,但我现在可以告诉您错误是因为文件名以数字开头。将文件名更改为 file_3 或以字符而不是数字开头的名称
  • 没有。不管你用什么IDE,模块(文件)不应该以数字开头
  • 成功了,非常感谢。那真是太愚蠢了。
猜你喜欢
  • 2013-02-18
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
相关资源
最近更新 更多