Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从导入类中的另一个脚本调用函数_Python_Button_Tkinter_Event Handling_Function Calls - Fatal编程技术网

Python 如何从导入类中的另一个脚本调用函数

Python 如何从导入类中的另一个脚本调用函数,python,button,tkinter,event-handling,function-calls,Python,Button,Tkinter,Event Handling,Function Calls,我正在使用tkinter、Python3.6.3和Windows操作系统构建我的第一个更大的Python应用程序。应用程序的GUI由一个带有多个选项卡的笔记本组成。每个选项卡依次包含一个Labelframe,Labelframe又包含许多其他小部件 在搜索Stackflow时,我发现了让每个labelFrame成为一个类的想法。然后在main.py中导入该类,最后创建该类的实例 现在,当按下表1中的“开始”按钮时,我想执行“打印此”功能。理想情况下,我希望使用脚本main.py中定义的函数。它还

我正在使用tkinter、Python3.6.3和Windows操作系统构建我的第一个更大的Python应用程序。应用程序的GUI由一个带有多个选项卡的笔记本组成。每个选项卡依次包含一个Labelframe,Labelframe又包含许多其他小部件

在搜索Stackflow时,我发现了让每个labelFrame成为一个类的想法。然后在main.py中导入该类,最后创建该类的实例

现在,当按下表1中的“开始”按钮时,我想执行“打印此”功能。理想情况下,我希望使用脚本main.py中定义的函数。它还想知道如何使用Run\u Test\u窗口类调用“printThis”方法。不幸的是,这两个问题我都没有解决

有趣的是,程序实际上打印“Now successful”(现在成功),而我什么都不做,但当我按下“Start”(开始)按钮时,什么也没有发生

谢谢你的帮助!谢谢

main.py

import tkinter as tk  
import tkinter.ttk as ttk

import RunTestClass as RT

def printThis():
  print('Successful')

root    = tk.Tk()
note    = ttk.Notebook(root)
note.grid()  

tab1    = ttk.Label(note, width = -20)
note.add(tab1, text = "       Run Test      ")

window1 = RT.Run_Test_Window(tab1)

root.mainloop()
RunTestClass.py

import tkinter as tk
import tkinter.ttk as ttk

# from main import printThis

class Run_Test_Window:

    def printThis(self):
        print('Now successful!') 

    def __init__(self,tab1):
        runTestLabelFrame = ttk.LabelFrame(text ="Run Test", padding =10)
        runTestLabelFrame.grid(in_ = tab1, padx = 20, pady = 20)

        self.startButton  = ttk.Button(runTestLabelFrame,    text="START",command=self.printThis())
        self.startButton.grid(row=5, column=1, padx = 10)

如果我说的没错,您希望按钮使用
main
中的
printThis()
。这可以通过在
main
中添加以下内容来实现:

rt = RT.Run_Test_Window(tab1)
rt.startButton.configure(command=printThis)
要调用
RunTestClass
中定义的
printThis()
,请使用(也在
main
中)

注意:在
命令
参数中创建按钮时,请保留括号。因此,将其更改为:

self.startButton  = ttk.Button(runTestLabelFrame,    text="START",command=self.printThis)

您的标题与您的问题无关,而且您从未指定要调用PrintThis的位置将此行window1=RT.Run_Test_Window(tab1)转换为RT(tab1)以进行初始化。很抱歉,反物质名称。我想我已经这样描述了“当按下tab1中的“开始”按钮时,我想执行“打印此”功能”。也许我应该用“呼叫”而不是“执行”谢谢ViG!configure(command=printThis)对我来说非常好。rt.printThis()也可以工作,但也可以打印“现在成功!”有一次,虽然我没有按下按钮Startbutton@user2423970由于
rt,它将打印一次。printThis()
。如果您对此进行注释,它将不再打印
,现在已成功打印
;并且仅在按下按钮时打印
成功
self.startButton  = ttk.Button(runTestLabelFrame,    text="START",command=self.printThis)