Class 使用Tkinter和Python将同一框架内的两个不同类插入笔记本时出现问题

Class 使用Tkinter和Python将同一框架内的两个不同类插入笔记本时出现问题,class,tkinter,frames,Class,Tkinter,Frames,我一直在尝试使用Tkinter和Python在同一个框架内插入两个不同的类(在“MyListbox”和“Calculation”下面的代码中)。事实上,我没有收到任何来自我的电脑的报告说我错在哪里。我的电脑没有显示任何东西,甚至连一条信息都没有。你能帮我解决这个问题吗 提前谢谢 代码如下: import Tkinter from Tkinter import * from Tkinter import Tk, Text, BOTH, W, N, E, S from ttk import Fram

我一直在尝试使用Tkinter和Python在同一个框架内插入两个不同的类(在“MyListbox”和“Calculation”下面的代码中)。事实上,我没有收到任何来自我的电脑的报告说我错在哪里。我的电脑没有显示任何东西,甚至连一条信息都没有。你能帮我解决这个问题吗

提前谢谢

代码如下:

import Tkinter
from Tkinter import *
from Tkinter import Tk, Text, BOTH, W, N, E, S
from ttk import Frame, Button, Label, Style
import Tkinter as tk
import ttk 
import tkFont
from ttk import *
import tkMessageBox
import sys
import math
import Tkconstants 


def defocus(event):
    event.widget.master.focus_set()

root = tk.Tk()
root.title("Autana")

f= tkFont.Font(family="verdana", size=12,weight=tkFont.BOLD)#, weight=tkFont.BOLD)
f2= tkFont.Font(family="Times", size=20, weight=tkFont.BOLD)

c1= 'PeachPuff2'

notebook = ttk.Notebook(root)
notebook.pack(fill=BOTH, expand=True)
notebook.pressed_index = None

ContainerOne = Tkinter.Frame(notebook);
ContainerOne.pack(fill=BOTH, expand=True);

notebook.add(ContainerOne, text='Standard Reliability')

canvas1 = Canvas(ContainerOne, width=950, height=450,bg=c1)
scroll = Scrollbar(ContainerOne, command=canvas1.yview)
canvas1.config(yscrollcommand=scroll.set, scrollregion=(0,0,100,1000))
canvas1.pack(side=LEFT, fill=BOTH, expand=True)
scroll.pack(side=RIGHT, fill=Y)

frameOne = Tkinter.Frame(canvas1, width=900, height=450,bg=c1,bd=22)
canvas1.create_window(630, 270, window=frameOne)

class MyListbox:
    def __init__(self, parent):#, title):
        self.parent = parent
        self.myData= (
                    ["1", "Jhon Doe", "Madrid", "0341-672541", "6 SD"],
                    ["5", "Kenji S.", "Tokyo", "0341-213212", "10 SD"])
        self.establishment()

    def combobox_handler(self, event):
        current = self.combobox.current()
        self.entNumber.delete(0, END)
        self.entName.delete(0, END)
        self.entCity.delete(0, END)
        self.entTel.delete(0, END)
        self.entAddress.delete(0, END)

        self.entNumber.insert(END, self.myData[current][0])
        self.entName.insert(END, self.myData[current][1])
        self.entCity.insert(END, self.myData[current][2])
        self.entTel.insert(END, self.myData[current][3])
        self.entAddress.insert(END, self.myData[current][4])

    def establishment(self):
        mainFrame = Frame(self.parent)
        mainFrame.pack(fill=BOTH, expand=YES)

        fr_left = Frame(mainFrame)#, bd=10)
        fr_left.pack(fill=BOTH, expand=YES, side=LEFT)

        names = [person[1] for person in self.myData]
        self.combobox = ttk.Combobox(fr_left, values=names)
        self.combobox.bind('<<ComboboxSelected>>', self.combobox_handler)
        self.combobox.pack()
        self.combobox.set("Data People")

        fr_right = Frame(mainFrame)#, bd=10)
        fr_right.pack(fill=BOTH, expand=YES, side=RIGHT)

        fr_up = Frame(fr_right)
        fr_up.pack(side=TOP, expand=YES)

        Label(fr_up, text='List Number').grid(row=0, column=0, sticky=W)
        self.entNumber = Entry(fr_up)
        self.entNumber.grid(row=0, column=1)

        Label(fr_up, text='Name').grid(row=1, column=0, sticky=W)
        self.entName = Entry(fr_up)
        self.entName.grid(row=1, column=1)

        Label(fr_up, text='City').grid(row=2, column=0, sticky=W)
        self.entCity = Entry(fr_up)
        self.entCity.grid(row=2, column=1)

        Label(fr_up, text='No. Tel').grid(row=3, column=0, sticky=W)
        self.entTel = Entry(fr_up)
        self.entTel.grid(row=3, column=1)

        Label(fr_up, text='Address').grid(row=4, column=0, sticky=W)
        self.entAddress = Entry(fr_up)
        self.entAddress.grid(row=4, column=1)


class Calculation:

    def __init__(self, parent):
        self.parent = parent
        self.Value1()
        self.Value2()
        self.Result()

        Label(self.parent,text='Num 1').grid(column=2, row=5, sticky=W, pady=3)
        Label(self.parent,text='Num 2').grid(column=2, row=6, sticky=W, pady=3)
        Label(self.parent,text='result').grid(column=9,row=9, sticky=W, pady=3)

        self.msg = Label(self.parent,text='Sum of 2 number')
        self.msg.grid(row=3,column=1,columnspan=2)

        self.Button = Button(text='Calculate',width=8,command=self.Calc)
        self.Button.grid(row=9,column=2,padx=2,pady=3)

    def Value1(self):
        self.field1 = ttk.Combobox(self.parent)
        self.field1['values'] = ('5', '6', '7')
        self.field1.grid(column=3, row=5)

    def Value2(self):
        self.field2 = ttk.Combobox(self.parent)
        self.field2['values'] = ('1', '2', '3')
        self.field2.grid(column=3, row=6)

    def Result(self):
        self.entry = StringVar()
        self.entry = ttk.Entry(self.parent, textvariable=self.entry)
        self.entry.grid(column=3, row=9)

    def Calc(self):
        self.entry.delete(0, END)
        try:
            value = int(self.field1.get()) + int(self.field2.get())
        except ValueError:
            self.entry.insert(0, 'Input numbers.')
        else:
            self.entry.insert(0, str(value))

if __name__ == '__main__':

    stepOne = Tkinter.LabelFrame(frameOne, text=" 1. Select People: ",font= f2, bd=6)
    stepOne.grid(row=0, columnspan=5, sticky='nsew', \
                 padx=5, pady=5, ipadx=5, ipady=5)

    stepTwo = Tkinter.LabelFrame(frameOne, text=" 2. Calculation : ",font= f2, bd=6)
    stepTwo.grid(row=2, columnspan=7, sticky='w', \
             padx=5, pady=5, ipadx=5, ipady=5)

    app = MyListbox(stepOne)
    app2 = Calculation (stepOne)----> This is not working!
    root.mainloop()
导入Tkinter
从Tkinter进口*
从Tkinter导入Tk、Text、BOTH、W、N、E、S
从ttk导入框架、按钮、标签、样式
将Tkinter作为tk导入
导入ttk
导入tkFont
从ttk导入*
导入tkMessageBox
导入系统
输入数学
导入Tkconstants
def离焦(事件):
event.widget.master.focus\u set()
root=tk.tk()
根标题(“Autana”)
f=tkFont.Font(family=“verdana”,size=12,weight=tkFont.BOLD)#,weight=tkFont.BOLD)
f2=tkFont.Font(family=“Times”,size=20,weight=tkFont.BOLD)
c1=‘桃子泡芙2’
notebook=ttk.notebook(根目录)
notebook.pack(填充=两者,展开=真)
notebook.u索引=无
ContainerOne=Tkinter.Frame(笔记本);
pack(fill=BOTH,expand=True);
notebook.add(ContainerOne,text='Standard Reliability')
画布1=画布(ContainerOne,宽度=950,高度=450,背景=c1)
滚动=滚动条(ContainerOne,command=canvas1.yview)
canvas1.config(yscrollcommand=scroll.set,scrollregion=(0,01000))
canvas1.pack(side=LEFT,fill=BOTH,expand=True)
滚动包装(侧面=右侧,填充=Y)
frameOne=Tkinter.Frame(画布1,宽度=900,高度=450,背景=c1,bd=22)
画布1.创建_窗口(630270,窗口=框架一)
类别MyListbox:
def uuu init uuuuuu(自我,家长):#,标题):
self.parent=parent
self.myData=(
[“1”、“Jhon Doe”、“马德里”、“0341-672541”、“6 SD”],
[“5”、“Kenji S.”、“东京”、“0341-213121”、“10 SD”])
自我建立()
def组合框_处理程序(自身、事件):
current=self.combobox.current()
self.entNumber.delete(0,结束)
self.entName.delete(0,结束)
self.entCity.delete(0,结束)
self.entTel.delete(0,结束)
self.entAddress.delete(0,结束)
self.entNumber.insert(END,self.myData[current][0])
self.entName.insert(END,self.myData[current][1])
self.entCity.insert(END,self.myData[current][2])
self.entTel.insert(END,self.myData[current][3])
self.entAddress.insert(END,self.myData[current][4])
def建立(自我):
大型机=帧(self.parent)
mainFrame.pack(fill=BOTH,expand=YES)
fr_左=帧(主机)#,bd=10)
fr_left.pack(填充=两者,展开=是,侧面=左侧)
name=[person[1]表示self.myData中的person]
self.combobox=ttk.combobox(左前,值=名称)
self.combobox.bind(“”,self.combobox\u处理程序)
self.combobox.pack()
self.combobox.set(“数据人”)
fr_right=帧(主机)#,bd=10)
fr_right.pack(填充=两者,展开=是,侧面=右侧)
FRU向上=帧(FRU向右)
FRU up.pack(侧面=顶部,展开=是)
标签(fr_up,text='List Number').grid(行=0,列=0,粘性=W)
self.entNumber=条目(fr\u up)
self.entNumber.grid(行=0,列=1)
标签(fr_up,text='Name').grid(行=1,列=0,粘性=W)
self.entName=条目(fr\u up)
self.entName.grid(行=1,列=1)
标签(fr_up,text='City').grid(行=2,列=0,粘性=W)
self.entCity=Entry(fr\u up)
self.entCity.grid(行=2,列=1)
标签(fr_up,text='No.Tel').grid(行=3,列=0,粘性=W)
self.entTel=入口(FRU up)
self.entTel.grid(行=3,列=1)
标签(fr_up,text='Address').grid(行=4,列=0,粘性=W)
self.entAddress=条目(fr\u up)
self.entAddress.grid(行=4,列=1)
类别计算:
定义初始化(自身,父级):
self.parent=parent
self.Value1()
self.Value2()
self.Result()
标签(self.parent,text='Num 1').grid(column=2,row=5,sticky=W,pady=3)
标签(self.parent,text='Num 2').grid(column=2,row=6,sticky=W,pady=3)
标签(self.parent,text='result').grid(列=9,行=9,粘滞=W,pady=3)
self.msg=Label(self.parent,text='2个数字之和')
self.msg.grid(行=3,列=1,列span=2)
self.Button=Button(text='Calculate',width=8,command=self.Calc)
self.Button.grid(行=9,列=2,padx=2,pady=3)
def值1(自身):
self.field1=ttk.Combobox(self.parent)
self.field1['values']=('5','6','7')
self.field1.grid(列=3,行=5)
def值2(自身):
self.field2=ttk.Combobox(self.parent)
self.field2['values']=('1','2','3')
self.field2.grid(列=3,行=6)
def结果(自我):
self.entry=StringVar()
self.entry=ttk.entry(self.parent,textvariable=self.entry)
self.entry.grid(列=3,行=9)
def计算(自身):
self.entry.delete(0,结束)
尝试:
value=int(self.field1.get())+int(self.field2.get())
除值错误外:
self.entry.insert(0,“输入数字”)
其他:
self.entry.insert(0,str(value))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
stepOne=Tkinter.LabelFrame(frameOne,text=“1.选择人员:”,font=f2,bd=6)
stepOne.grid(行=0,列span=5,粘性=nsew'\
padx=5,pady=5,ipadx=5,ipady=5)
Step2=Tkinter.LabelFrame(frameOne,text=“2.Calculation:”,font=f2,bd=6)
第二步。网格(行=2,列span=7,粘性=w'\
padx=5,pady=5,ipadx=5,ipady=5)
app=MyListbox(第一步)
app2=计算(第一步)-->这不起作用!
root.mainloop()

您使用的是
app2=Calculation(stepOne)
,这意味着您将具有相同父级的不同小部件放置在相同的网格位置。这种情况下的结果是Tkinter根本不显示任何小部件<
self.Button = Button(text='Calculate',width=8,command=self.Calc)
self.Button.grid(row=9,column=2,padx=2,pady=3)
import Tkinter as tk
import ttk 
import tkFont
import tkMessageBox
import sys
import math

# ...