如何从导入的类

时间:2018-01-29 12:49:55

标签: python button tkinter event-handling function-calls

我正在使用tkinter,python 3.6.3和窗口OS构建我的第一个更大的Python应用程序。该应用程序的GUI包含一个带有多个选项卡的Notebook。每个选项卡依次包含一个Labelframe,而Labelframe又包含许多其他小部件。

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

现在,当按下tab1中的“开始”按钮时,我想执行'printThis'功能。理想情况下,我想使用脚本main.py中定义的函数。它还有兴趣知道如何使用Run_Test_Window类调用'printThis'方法。不幸的是我没有解决任何一个问题。

有趣的是,该节目实际上打印出“现在成功”而没有我做任何事情,但是当我按下“开始”按钮时没有任何反应。

感谢帮助!谢谢!

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)

1 个答案:

答案 0 :(得分:0)

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

rt = RT.Run_Test_Window(tab1)
rt.startButton.configure(command=printThis)

要拨打printThis()中定义的RunTestClass,请使用(也在main中)

rt.printThis()

注意:在command参数中创建按钮时保留括号。所以改成它:

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