【问题标题】:Starting another script using a button in tkinter使用 tkinter 中的按钮启动另一个脚本
【发布时间】:2016-09-07 20:52:35
【问题描述】:

我正在尝试使用 tkinter 中的按钮在脚本中运行另一个脚本

我尝试了两种方法,一种是

import os

class SeaofBTCapp(tk.Tk):
    #initilization
    def __init__(self, *args, **kwargs):      
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.wm_title(self, "Battery Life Calculator")
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand = True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames = {}
        for F in (StartPage, PageOne, PageTwo, PageThree):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")
        self.show_frame(StartPage)


#raise each page to the front
    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

    def helloCallBack():
        os.system('python test2.py')

#the start page        
class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = ttk.Label(self, text="Start Page", font=LARGE_FONT)
        label.pack(pady=10,padx=10)
        button = ttk.Button(self, text="Visit Page         1",command=lambda:controller.show_frame(PageOne))                  
        button.pack()
        button1 = ttk.Button(self, text="Visit Page 2",command=lambda:controller.show_frame(PageTwo))                 
        button1.pack()
        button2 = ttk.Button(self, text="Visit Graph page",command=lambda:controller.show_frame(PageThree))              
        button2.pack()
        button3 = ttk.Button(self, text="execute test",command=lambda:controller.helloCallBack)               
        button3.pack()

没有给出错误,但是当我点击执行时没有任何反应

我尝试的另一种方法是

import test2

但它会自动运行脚本并打印“我是一个测试”

我应该注意我试图调用的脚本只是一个测试,只是打印“我是一个测试”

感谢任何帮助!

谢谢

****编辑****

import tkinter as tk
from tkinter import ttk

import test2







LARGE_FONT= ("Verdana", 12)

class SeaofBTCapp(tk.Tk):


#initilization
    def __init__(self, *args, **kwargs):      



        tk.Tk.__init__(self, *args, **kwargs)

        tk.Tk.wm_title(self, "Battery Life Calculator")


        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand = True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (StartPage, PageOne, PageTwo, PageThree):

            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)



#raise each page to the front
    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()







#the start page        
class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = ttk.Label(self, text="Start Page", font=LARGE_FONT)
        label.pack(pady=10,padx=10)

        button = ttk.Button(self, text="Visit Page 1",command=lambda:controller.show_frame(PageOne))

        button.pack()

        button1 = ttk.Button(self, text="Visit Page 2",command=lambda:controller.show_frame(PageTwo))

        button1.pack()

        button2 = ttk.Button(self, text="Visit Graph page",command=lambda:controller.show_frame(PageThree))

        button2.pack()

        button3 = ttk.Button(self, text="execute test",command=test2.main)

        button3.pack()











class PageOne(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = ttk.Label(self, text="Page One", font=LARGE_FONT)
        label.pack(pady=10,padx=10)

        button1 = ttk.Button(self, text="Back to start page",command=lambda:controller.show_frame(StartPage))

        button1.pack()

        button1 = ttk.Button(self, text="Visit Page 2",command=lambda:controller.show_frame(PageTwo))

        button1.pack()

class PageTwo(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = ttk.Label(self, text="Page One", font=LARGE_FONT)
        label.pack(pady=10,padx=10)

        button1 = ttk.Button(self, text="Back to Start Page",command=lambda:controller.show_frame(StartPage))

        button1.pack()

        button1 = ttk.Button(self, text="Back to Page One",command=lambda:controller.show_frame(PageOne))

        button1.pack()

class PageThree(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = ttk.Label(self, text="Graph Page", font=LARGE_FONT)
        label.pack(pady=10,padx=10)

        button1 = ttk.Button(self, text="Back to Start Page",command=lambda:controller.show_frame(StartPage))

        button1.pack()




app = SeaofBTCapp()
app.mainloop()

test2.p如下

def main():

    if __name__ == "__main__":
        print("Executing as main program")
        print("Value of __name__ is: ", __name__)
        main()

【问题讨论】:

  • 这不是一个完整的程序——只有两个类声明。如果这是你所拥有的,那么它什么都不做也就不足为奇了。
  • 我完全知道它不是一个完整的程序,除了调用我的函数之外,该程序运行良好。我只是添加了我一直在尝试使用此脚本的实例。
  • 最好有Short, Self Contained, Correct (Compilable), Example 以便其他人可以尝试运行该程序来帮助他们解决问题。

标签: python python-3.x user-interface tkinter


【解决方案1】:

不建议您使用第一种方法。如果你有另一个 python 脚本,你一定要导入它。

关于第二种方法:
我的猜测是脚本test2.py 没有写

if __name__ == "__main__":
    main()

这就是为什么它会在您导入时向您发送消息。

【讨论】:

  • 谢谢你我没有这样做!运行脚本的按钮代码是什么?我目前有 button2 = ttk.Button(self, text="Visit Graph page",command=lambda:controller.show_frame(PageThree)) 在页面之间切换。谢谢
  • 我现在将我的测试作为 def main(): if name == "main": print("Executing as main program") print("name 的值是:", name) main() 和我的导入作为 import test2 和我的按钮作为 button3 = ttk.Button(self, text="执行 test",command=lambda:test2.main) 当我按下按钮时我没有错误但没有任何反应?很抱歉阅读不确定如何在 cmets 中嵌入代码
  • 如果您运行不带参数的函数(并且不带 ()),则不需要 lambda。让你的代码有问题。在评论中它是不可读的。我认为您以错误的方式使用 if __name__ - 在错误的地方 - 您必须在 main() 之外使用它。如果你导入 test2.py 但你不直接运行test2.py 那么你不需要if __name__ 但你仍然需要将代码保留在函数中。
  • 刚刚将代码粘贴到问题中,当我尝试您的代码时工作!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
相关资源
最近更新 更多