Tkinter:合并2个窗口

2024-10-03 17:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在玩我的第一个pythonttkintergui。 下面是我写的剧本。说实话,我在网上到处找过,想知道怎么做。在

当我运行我的脚本现在我有两个独立的窗口。 一个窗口,让我们称之为“窗口A”,有我的文本和输入框,还有一个空窗口,我们称之为“窗口B”。在

当我点击“窗口A”中的“运行”我的植物基因脚本(tennisMatchProbability.py在本例中)被触发,并且该脚本的结果(tennisMatchProbability.py)显示在“窗口B”中。在

这是“te”的输出nnisMatchProbability.py“给予。在

Server Game = 0.735729230769
Receiver Game= 0.264270769231
Tiebreak = 0.337026817252
Server Set = 0.205146215901
Receiver Set= 0.794853784099
Match Server= 0.108987765053
Match Receiver= 0.891012234947

我想实现的是将两个窗口合并为一个窗口。在

我已经尝试了所有我能想到但却想不出来的东西。在

^{pr2}$

Tags: py文本脚本gameservermatch基因植物
2条回答

@Jannick,用你的脚本,我在GUI中没有得到结果。我用你的脚本在CMD中得到结果,“Run”bottun给出一个错误

通过下面的代码,我可以在GUI中得到结果。在

from Tkinter import *
import sys
sys.path.append("C:\Users\Magali\Desktop\Tennis\tennisMatchProbability.py")

class App(Frame):
    def run_script(self):
        sys.stdout = self
        try:
            del(sys.modules["tennisMatchProbability"])
        except:
            ## Yeah, it's a real ugly solution...
            pass
        import tennisMatchProbability
        tennisMatchProbability.matchProb()
        sys.stdout = sys.__stdout__


    def build_widgets(self):
        self.text1 = Text(self)
        self.text1.grid(row=5)



        Label(self, text="First Name").grid(row=0)
        Label(self, text="Last Name").grid(row=1)
        Label(self, text="Game Score").grid(row=2)
        Label(self, text="Set Score").grid(row=3)

        e1 = Entry(self)
        e2 = Entry(self)
        e3 = Entry(self)
        e4 = Entry(self)
        e1.delete(0,END)
        e2.delete(0,END)
        e3.delete(0,END)
        e4.delete(0,END)


        e1.insert(10,"Novak")
        e2.insert(10,"Djokovic")
        e3.insert(10,"30-15")
        e4.insert(10,"3-1")


        e1.grid(row=0,column=1)
        e2.grid(row=1, column=1)
        e3.grid(row=2, column=1)
        e4.grid(row=3, column=1)

        Button(self,text='Run', command=self.run_script).grid(row=4, column=1, sticky=W, pady=4)



    def write(self, txt):
        self.text1.insert(INSERT, txt)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.build_widgets()


root = Tk()
app = App(master = root)
app.mainloop()

答案很简单: 在build_widgets方法中,使用

        master = Tk()

应用程序中不应该有两个Tk()调用。 解决方法是删除这一行,并将每一次出现的master更改为self。自表示应用程序类,它继承自tk.框架类,因此是您的主要框架。在

你对run_Scip的构造也很奇怪。你为什么不这样做呢?在

^{pr2}$

这是完整的代码

from Tkinter import *
import sys
sys.path.append("C:\Users\Magali\Desktop\Tennis\tennisMatchProbability.py")
import tennisMatchProbability

class App(Frame):

    def run_script(self):
        inputs = self.read_tk_field()
        result = tennisMatchProbability.matchProb(inputs)
        self.show_prob_result(result)

    def show_prob_result(self,result):
        self.result_label.config(text=result)

    def build_widgets(self):

        Label(self, text="First Name").grid(row=0)
        Label(self, text="Last Name").grid(row=1)
        Label(self, text="Game Score").grid(row=2)
        Label(self, text="Set Score").grid(row=3)

        e1 = Entry(self)
        e2 = Entry(self)
        e3 = Entry(self)
        e4 = Entry(self)
        self.result_label = Label(self)

        e1.insert(10,"Novak")
        e2.insert(10,"Djokovic")
        e3.insert(10,"30-15")
        e4.insert(10,"3-1")

        e1.grid(row=0, column=1)
        e2.grid(row=1, column=1)
        e3.grid(row=2, column=1)
        e4.grid(row=3, column=1)
        self.result_label.grid(row=4, column=1)

        Button(self, text='Run', command=self.run_script).grid(row=5, column=1, sticky=W, pady=4)

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.build_widgets()


root = Tk()
app = App(master = root)
app.mainloop()

相关问题 更多 >