-1

これは私のコード全体です:

from Graphics import *
import random
import time
from Myro import *
pt = Point(100,50)
pink = makeColor(200,100,150)
black = makeColor(0,0,0)
red = makeColor(255, 0, 0)
green = makeColor(0, 255, 0)
blue = makeColor(0, 0, 255)
purple = makeColor(255, 0, 255)
orange = makeColor(255, 153, 0)

win = Window("name", 1000, 500)
p1 = Point(0,0)
p2 = Point(200, 300)
p3 = Point(200,0)
d3 = Dot(p3)
p4 = Point(400, 300)
d4 = Dot(p4)
p5 = Point(400, 0)
p6 = Point(600, 300)
p7 = Point(600, 0)
p8 = Point(800,300)
p9 = Point(800,0)
p0 = Point(1000, 300)

win.setBackground(pink)
class Classes(object):
    WIDTH = 200
    HEIGHT = 300

    five = Rectangle(p9, p0)
    five.setOutline(black)
    five.setFill(orange)
    five.draw(win)
    four = Rectangle(p7, p8)
    four.setOutline(black)
    four.setFill(purple)
    four.draw(win)
    three = Rectangle(p5, p6)
    three.setOutline(black)
    three.setFill(blue)
    three.draw(win)
    two = Rectangle(p3, p4)
    two.setOutline(black)
    two.setFill(green)
    two.draw(win)
    one = Rectangle(p1, p2)
    one.setOutline(black)
    one.setFill(red)
    one.draw(win)

    '''def __init__(self,p,win):
        def numClasses(self):
            num = ask("How many classes do you have? Enter a number 1-5")
            int(num)
            if num == 1:


        def askOne(self):
            one = ask'''

'''class classOne(Classes):
    def __init__(self, win):
        Classes.__init__(self, win)
        self.appearance.setFill(red)
        self.appearance.setOutline(black)'''

        #self.append(win)
class classTwo(Classes):
    def __init__(self, win):
        Classes.__init__(self,win)
        self.appearance= Text(Point(100, 10), "Class 1")
        self.appearance.fontSize = 10
        self.appearance.setFill(black)
        self.appearance.draw(win)
        win.flip()
class classThree(Classes):
    def __init__(self, win):
        Classes.__init__(self,  win)
        self.appearance.setFill(blue)
        self.appearance.setOutline(black)
class classFour(Classes):
    def __init__(self,  win):
        Classes.__init__(self,  win)
        self.appearance.setFill(orange)
        self.appearance.setOutline(black)
class classFive(Classes):
    def __init__(self,  win):
        Classes.__init__(self, win)
        self.appearance.setFill(purple)
        self.appearance.setOutline(black)

t = time.strftime("%Y-%m-%d")
ti = Text(Point(win.getWidth()/2, 475), t)
ti.fontSize = 26
ti.setFill(black)
ti.draw(win)

title = Text(Point(win.getWidth()/2, 440), "Schedule for the week of:")
title.setFill(black)
title.fontSize = 20
title.draw(win)

classes = []

別のこと、ウィンドウは私が使用しているバージョンの関数です。事前定義されているため、定義できません。描画できる別のウィンドウ (1000 x 500) ピクセルが開くだけです。クラスの下に入力されたときにテキストを表示する方法を知る必要があります。長方形/ポイント/シェイプでは機能しますが、テキストでは機能しません。どうしてか分かりません。

4

2 に答える 2

1

まず、クラスについて説明しますが(PythonにclassThreeがどのように表示され、どのように機能するかを指示します)、実際に作成したことはありません。

2番目-テキストを描画し、次にボックスを描画すると、ボックスがテキストを上書きし、表示されなくなります。

第三に、あなたはここでクラスを本当にひどく誤用しています。学校のカレンダーを作成し、学校の期間ごとに個別のPythonクラスを作成しようとしているようです。データとなるはずのものを取得し、コードとしてハードワイヤリングします。代わりに、汎用のPeriod Pythonクラスを用意してから、学期ごとに個別のインスタンスを作成する必要があります。

つまり、代わりに

a = FirstPeriod()
b = SecondPeriod()
c = ThirdPeriod()

あなたは次の観点から考える必要があります

a = Period("First", blue, black)
b = Period("Second", orange, black)
c = Period("Third", purple, black)

なんで?

  • それはあなたが達成しようとしていることをよりすぐに明らかにします
  • コードの量(したがってデバッグの量)を削減します
  • 後で変更を加えるのがはるかに簡単になります

編集:ここにいくつかの大幅に再編成されたコードがあります-私はCalicoをインストールしていないので、テストされていませんが、それがあなたにアイデアを与えることを願っています:

import Myro
from Graphics import Window, Point, Dot, Text, makeColor
import random
import time

Black  = makeColor(0,0,0)
White  = makeColor(255,255,255)
Red    = makeColor(255, 0, 0)
Green  = makeColor(0, 255, 0)
Blue   = makeColor(0, 0, 255)
Purple = makeColor(255, 0, 255)
Pink   = makeColor(200,100,150)
Orange = makeColor(255, 153, 0)
Grey   = makeColor(165, 165, 165)

Monday, Tuesday, Wednesday, Thursday, Friday = range(5)

class Period(object):
    def __init__(self,
        className="<spare>",
        textColor=Black,
        bgColor=White,
        borderColor=Black,
        schedule=None
    ):
        self.name     = className
        self.text     = textColor
        self.bg       = bgColor
        self.border   = borderColor
        self.schedule = schedule or []

    def draw(self, win, rows, columns):
        for day,(start,length) in self.schedule:
            # draw background box
            box = Rectangle(
                Point(columns[day],  rows[start]),
                Point(columns[day+1],rows[start+length])
            )
            box.setFill(self.bg)
            box.setOutline(self.border)
            box.draw(win)
            # draw class name
            label = Text(Point(columns[day]+10,rows[start]+40), self.name)
            label.fontSize = 9
            label.setFill(self.text)
            label.draw(win)

def Week(object):
    def __init__(self, label, periods=None):
        self.label   = label
        self.periods = periods or []

    def draw(self, win, left, top, width, height):
        # how much room to reserve at the top
        label_space = 40

        # draw label at top
        label = Text(Point(Point(left+0.5*width, top+0.5*label_space)), self.label)
        label.fontSize = 20
        label.setFill(Black)
        label.draw(win)

        # figure out the grid for displaying the calendar boxes
        days = 5
        columns = [left + width*n/days for n in range(days+1)]
        periods = 5
        rows = [top + label_space + (height-label_space)*n/periods for n in range(periods+1)]

        # draw class periods based on the grid
        for p in self.periods:
            p.draw(win, rows, columns)

def main():
    win = Window("My window", 1000, 500)
    win.setBackground(Pink)

    week = Week("14 May 2012",
        [
            Period("Math",    bgColor=Red,   schedule=[(Monday,(0,1)), (Wednesday,(0,1)), (Friday,(0,1))]),
            Period("Geology", bgColor=Grey,  schedule=[(Monday,(1,1)), (Tuesday,(0,1)), (Thursday,(0,1))]),
            Period("English", bgColor=Blue,  schedule=[(Tuesday,(1,1)), (Wednesday,(3,1)), (Thursday,(1,1))]),
            Period("LUNCH",   bgColor=White, schedule=[(Monday,(2,1)), (Tuesday,(2,1)), (Wednesday,(2,1)), (Thursday,(2,1)), (Friday,(2,1))]),
            Period("Gym",     bgColor=Orange, schedule=[(Tuesday,(3,2)), (Thursday,(3,2))])
        ]
    )
    week.draw(win, 10, 10, 980, 290)
    # have to do something here to prevent closing immediately?

if __name__=="__main__":
    main()
于 2012-05-16T16:06:03.997 に答える
0

クラスのインスタンスを作成する場合、コードは画面にテキストを書き込む必要があります。したがって、これをクラスの下に追加すると、

c2 = classTwo(win)

classTwoのオブジェクトをウィンドウに描画する必要があります。

また、以前にwin.flip()の部分について間違えました。コードに含めるべきではありません。

于 2012-05-16T03:12:04.783 に答える