2013-06-11 30 views
1

我一直試圖在Tkinter的同一個框架內插入兩個不同的類(在「MyListbox」和「Calculation」下面的代碼中)蟒蛇。其實我沒有收到我電腦的任何報告,說我錯在哪裏。我的電腦沒有顯示任何內容,甚至沒有消息。你能幫我解決這個問題嗎?使用Tkinter和Python在同一個框架內插入兩個不同類到筆記本中的問題

在此先感謝。

下面是代碼:

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() 
+0

它是'app2 =計算(stepOne)'或'app2 =計算(stepTwo)'?此外,你有很多冗餘導入,這使得很難從哪個模塊正在使用每個部件知道。 –

+0

您正在導入Tkinter三次,您應該只使用'import Tkinter as tk'。不過,我想出瞭如何解決您的問題,但我希望您回答我的問題,因爲它與解決方案相關。 –

+0

親愛的@ A.羅達斯,感謝您的及時回覆。我需要的進口清單如下所示: import Tkinter,從Tkinter導入*,導入Tkinter爲tk,導入ttk,導入tkFont。 我更喜歡在這裏寫代碼,而不是上面的代碼,因爲它對任何有相同問題的人都會更有用。 我需要類「計算」是這樣的: app2 =計算(stepOne)。 非常感謝你 Héctor – Hector

回答

3

您使用app2 = Calculation (stepOne),這意味着你將不同的部件在同一網格位置相同的父。在這種情況下的結果是Tkinter根本不顯示任何小部件。

但是即使app2 = Calculation (stepTwo)改變它,你仍然有同樣的問題,這個代碼兩行:

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

您沒有設置任何父母,所以它使用默認Tk的元素,同樣的問題我之前提到過,但這次是根元素。

最後,我強烈建議您只爲每個模塊使用一條導入語句,因爲Tkinterttk對某些類使用相同的名稱,如果您使用的是主題小部件,它也會不同。

import Tkinter as tk 
import ttk 
import tkFont 
import tkMessageBox 
import sys 
import math 

# ... 
相關問題