当前位置: 首页 > 知识库问答 >
问题:

tKinter:合并2个窗口

伊富
2023-03-14

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

当我在“窗口A”中单击“运行”时,我的phyton脚本(在本例中为TennisMatchProbability.py)将被触发,该脚本的结果(TennisMatchProbability.py)将显示在“窗口B”中。

这是“tennismatchprobability.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

我已经尝试了所有我能想到的但无法解决的事情。

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.pack(side=TOP)


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

        e1 = Entry(master)
        e2 = Entry(master)
        e3 = Entry(master)
        e4 = Entry(master)
        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(master, 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()

共有1个答案

孔睿
2023-03-14

答案很简单:在build_widgets方法中,您正在构造一个新的Tk框架和tcl解释器

        master = Tk()

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

而且,您对run_scipt的构造也很奇怪。你为什么不这样做呢?

    def run_script(self):
        inputs = self.read_tk_fields()
        result = tennisMatchProbability.matchProb(inputs)
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()
 类似资料:
  • 问题内容: 我有一个程序需要合并两个。哈希图的键为a ,值为。合并的特殊条件是,如果键已在字典中,则需要将其添加到现有值中而不是替换它。这是我到目前为止抛出的代码。 问题答案: 如果您的代码不能保证会在到达此方法之前将其初始化,则您将必须执行null检查,没有出路 考虑到HashMap允许将null作为值在代码中容易发生NPE的另一个位置是 如果这两个都不为空,则将获得NPE。

  • 主要内容:创建一个空白窗口,设置窗的位置主窗口控件(window)是一切控件的基础,它好比是一台高速运转的机器,而其他控件则相当于这台机器上的部件,比如齿轮、链条、螺丝等等。由此我们知道,主窗口是一切控件的基础,所有的控件的都需要通过主窗口来显示。 Tkinter 提供了一些关于主窗口对象的常用方法,在本节对这些方法做简单的介绍。 创建一个空白窗口 Tkinter 能够很方便地创建一个空白窗口,示例代码如下: 程序运行结果如下: 图1:

  • 问题内容: 让我们看一个例子。 我需要合并这两个对象数组并创建以下数组: 有没有JavaScript或jQuery函数可以做到这一点? 不适合我 它返回 问题答案: 如果要在JavaScript中合并2个对象数组。你可以使用这一招 例如 输出:

  • 本文向大家介绍Python GUI之tkinter窗口视窗教程大集合(推荐),包括了Python GUI之tkinter窗口视窗教程大集合(推荐)的使用技巧和注意事项,需要的朋友参考一下 一、前言   由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅。 二、Tkinter是什么   Tkinter 是使用 python 进行窗口视窗设计的模

  • 这是我的代码伙计们: 以下是错误: Traceback(最近一次调用最后一次):文件"C:/用户/Argel/PycharmProjects/day 2/rockpaper.py",第4行,在标签=标签(根,'Hello World')文件"C:\用户\Argel\AppData\本地\程序\Python\Python36-32\lib\tkinter__init__. py",第2760行,在i

  • 我得合并两个DF。一个是我的主df,另一个有很多NaN 合并应该只是“忽略”NaN值,并且只在列值不是NaN的地方合并。我尝试了不同的方法,但是df2中的数据有几十种可能出现NaN值。df1有168K行,df2大约有170行,应该与任何与所有非NAN值匹配的相关联。有人知道如何有效地做到这一点吗? 经过对不同方法的广泛研究,似乎一个“神奇”的方式忽略NaNs可能是不存在的。我想在df2上应用一个掩