簡體   English   中英

如何從從 tkinter 按鈕執行的 function 返回值?

[英]How can I return a value from an function that is executed from tkinter button?

剛開始學習Python。 我創建了一個包含 class 和 tkinter 功能的文件。

例如:

文件 1.py:

import tkinter as tk
import pandas as pd
import os
class flt:
    def func(var):
        var['file'] = pd.read_excel(os.getcwd()+'\\xyz.xlsx')
        if var[ch].get()==1:
            var['file'] = "Filter this file accordingly"   # Example
        if var[hc].get()==1:
            var['file'] = "filter this file accordingly"   #Example
        return var['file']     #I want this value in file2.py
    def do_something(var):
        root = var['root']
        mainframe = var['mainframe']
        var[ch] = IntVar()
        var[hc] = IntVar()
        ch1 = Checkbutton(mainframe, text='Filter by ABC',variable=var[ch])
        ch2 = Checkbutton(mainframe, text='Filter by 123', variable=var[ch])
        ch1.place(relx=0.4, rely=0.2)
        ch2.place(relx=0.4, rely=0.3)
        bt = tk.Button(mainframe, text='submit', command=lambda: flt.func(var))
        bt.place(relx=0.5, rely=0.5)

另一個文件,比如file2.py:

import tkinter as tk
root = tk.Tk()
mainframe = tk.Frame(root, relief='raised')
mainframe.place(relx=0.1, rely=0.1, width='1100', height='380')
val = {}
val['root'] = root
val['mainframe'] = mainframe
def chk:
    import file1
    value = file1.do_something(val)
    print(value)
btn = tk.Button(mainframe, text='Check', command = chk)
btn.place(relx=0.5, rely=0.8)
root.mainloop()

我想要file2.py中的值“var ['file']”(來自func(var)> file1.py)每個答案都值得贊賞。 謝謝你。

你不斷使你的代碼越來越復雜,我仍然不明白你想要什么。

因此,我制作了這個最小的程序來顯示當出現新按鈕並且用戶按下該按鈕的情況下,計算一個值並將其用於從另一個模塊調用任意 function: file1.py

import tkinter as tk

def func(var):
    var['file'] = 42
    return var['file']

def do_something(var, f):
    # root = var['root']
    mainframe = var['mainframe']
    bt = tk.Button(mainframe, text='submit', command=lambda: f(func(var)))
    # When the user presses submit, the function f is called with the 'return' value
    bt.place(relx=0.5, rely=0.5)

文件2.py

import tkinter as tk
root = tk.Tk()
mainframe = tk.Frame(root, relief='raised')
mainframe.place(relx=0.1, rely=0.1, width='1100', height='380')
val = {}
val['root'] = root
val['mainframe'] = mainframe

def f(value):
    print(value)   # Just prints the value, but could do anything!
    
def chk():
    import file1
    file1.do_something(val, f)  # f passed from here as a callback
    # Note - no return value

btn = tk.Button(mainframe, text='Check', command = chk)
btn.place(relx=0.5, rely=0.8)
root.mainloop()

注意:框架從小開始,您需要拖動它以將其調整為更大以查看按鈕。

首先,您必須創建相應的 class 然后導入文件。

文件1:

#creating a class
class person:
    def __init__ f1(self,x):# this function will be called everytime when the class is called
        self.value=x

文件2:

import file1    #importing the file (file name)
x=file1.person(10)#calling the class from file1 (parameter given as 10)
print(x.value)  #printing the value.

在你的情況下:

文件 1:

import tkinter as tk
class flt:
    def __init__(self,x):
        self.value = x*x

    def do_something(self,var):
        #some stuff

文件 2:

import file1
import tkinter as tk

#basic tkinter window code

trial=file1.flt('value')
test=trial.value #here you store the value of file1

def chk:
    value = file1.do_something(val)
    print(value)
btn = tk.Button(mainframe, text='Check', command = chk)
btn.place(relx=0.5, rely=0.8)
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM