班级人口计数器。如何将程序集于一身

时间:2016-08-12 01:43:04

标签: python python-2.7 python-3.x

我正在努力开发一个班级人口计数器。问题是,当我运行它2程序出现。我希望我的程序能够合而为一。计数器不断进入单独的程序,我无法将其转移到我的实际程序中。我该怎么做?

这是我的附件,我使用的是Python

import pickle
import os.path
from tkinter import *
import tkinter.messagebox
import tkinter as tk

population = 0 
def counter_label(label):
   population = 0
def count():
   global population
   population +=1
   label.config(text=str(population))
root = tk.Tk()
label = tk.Label(root)
label.pack()
counter_label(label)
button = tk.Button(root, text='Population Count', command=count).pack()
root.mainloop()

class Class:
    def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname

class ClassPopulation:
    def __init__(self):
        window = Tk()
        window.title("Class population")

        self.firstnameVar = StringVar()
        self.lastnameVar = StringVar()

        frame1 = Frame(window)
        frame1.pack()
        Label(frame1, text = "First name").grid(row = 1,
            column = 1, sticky = W)
        Entry(frame1, textvariable = self.firstnameVar,
            width = 40).grid(row = 1, column = 2)

        frame2 = Frame(window)
        frame2.pack()
        Label(frame2, text = "Last name").grid(row = 1, column = 1, sticky = W)
        Entry(frame2, textvariable = self.lastnameVar,
          width = 40).grid(row = 1, column = 2)

        frame3 = Frame(window)
        frame3.pack()
        Button(frame3, text = "Add to classlist", 
            command = self.processAdd).grid(row = 1, column = 1)

        frame4 = Frame(window)
        frame4.pack()
        Label(frame4, text = "Population Count").grid(row = 1, column = 1, sticky = W)

        frame5 = Frame(window)
        frame5.pack()
        Label(frame5, text = "0").grid(row = 1, column = 1, sticky = W)


        self.classList = self.loadClass()
        self.current = 0

        if len(self.classList) > 0:
            self.setClass()

    def saveClass(self):
        outfile = open("Population.dat", "wb")
        pickle.dump(self.classList, outfile)
        tkinter.messagebox.showinfo("Class Population","New name registered")
        outfile.close()

    def loadClass(self):
        if not os.path.isfile("Population.dat"):
            return [] # Return an empty list
        try:
            infile = open("Population.dat", "rb")
            classList = pickle.load(infile)
        except EOFError:
            classList = []

        infile.close()
        return classList

    def processAdd(self):
        classList = Class(self.firstnameVar.get(), self.lastnameVar.get())
        self.classList.append(classList)
        self.saveClass()

    def setClass(self):
        self.firstnameVar.set(self.classList[self.current].firstname)
        self.lastnameVar.set(self.classList[self.current].lastname)


ClassPopulation()

1 个答案:

答案 0 :(得分:1)

我认为有两个窗口出现是因为程序运行root = tk.Tk()两次 - 一个window = Tk()而另一个root。如果您将ClassPopulation Tkinter实例传递给类class Class: def __init__(self, firstname, lastname): self.firstname = firstname self.lastname = lastname class ClassPopulation: def __init__(self, root_window): window = self.root_window window.title("Class population") population = 0 def counter_label(label): population = 0 def count(): global population population +=1 label.config(text=str(population)) root = Tk() label = tk.Label(root) label.pack() ClassPopulation( root ) counter_label(label) root.mainloop() ,那么它应显示一个窗口。

[编辑]

{{1}}