• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    python計算圓周長、面積、球體體積并畫出圓

    來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 14:38:34
    文檔

    python計算圓周長、面積、球體體積并畫出圓

    python計算圓周長、面積、球體體積并畫出圓:輸入半徑,計算圓的周長、面積、球體體積,并畫出這個圓。拖動條、輸入框和圖像控件的數(shù)據(jù)保持一致! Fedora下測試通過 代碼如下:#https://github.com/RobberPhex/GTK-Example-CalcAreafrom gi.repository import Gtk, Gdk,
    推薦度:
    導讀python計算圓周長、面積、球體體積并畫出圓:輸入半徑,計算圓的周長、面積、球體體積,并畫出這個圓。拖動條、輸入框和圖像控件的數(shù)據(jù)保持一致! Fedora下測試通過 代碼如下:#https://github.com/RobberPhex/GTK-Example-CalcAreafrom gi.repository import Gtk, Gdk,

    輸入半徑,計算圓的周長、面積、球體體積,并畫出這個圓。
    拖動條、輸入框和圖像控件的數(shù)據(jù)保持一致!

    Fedora下測試通過

    代碼如下:


    #https://github.com/RobberPhex/GTK-Example-CalcArea
    from gi.repository import Gtk, Gdk, GdkPixbuf
    from PIL import Image, ImageDraw
    from io import BytesIO
    from math import pi

    class Model:
    '''
    模型類
    存儲半徑,計算周長、面積、體積
    '''

    def __init__(self):
    self._radius = 0

    def setRadius(self, radius):
    self._radius = float(radius)

    def getRadius(self):
    return self._radius

    def getPerimeter(self):
    return pi * self._radius * 2

    def getArea(self):
    return self._radius ** 2 * pi

    def getVolume(self):
    return 4 * pi * self._radius ** 3 / 3


    class Controller:
    '''
    控制器類
    控制視圖和模型的更新
    '''

    def __init__(self, model):
    self.model = model
    self._observers = []

    def addObserver(self, observer):
    self._observers.append(observer)

    def setRadius(self, radius):
    model.setRadius(radius)
    self.notify()

    def notify(self):
    for observer in self._observers:
    observer.update()


    class TextView:
    '''
    文字視圖類
    處理文本輸入框的視圖
    '''

    def __init__(self, model, rEntry, pEntry, aEntry, vEntry):
    '''
    :type model Model
    '''
    self.model = model
    self.rEntry = rEntry
    self.pEntry = pEntry
    self.aEntry = aEntry
    self.vEntry = vEntry

    def update(self):
    self.rEntry.set_text('%2.2f' % self.model.getRadius())
    self.pEntry.set_text('%2.2f' % self.model.getPerimeter())
    self.aEntry.set_text('%2.2f' % self.model.getArea())
    self.vEntry.set_text('%2.2f' % self.model.getVolume())


    class ScaleView:
    '''
    拖動條視圖
    處理拖動條的視圖
    '''

    def __init__(self, model, scale):
    '''
    :type model Model
    '''
    self.model = model
    self.scale = scale

    def update(self):
    self.scale.set_value(self.model.getRadius())


    class ImageView:
    '''
    圖像視圖
    處理圖像的視圖
    '''

    @classmethod
    def imgToPixbuf(cls, img):
    '''
    :type img Image
    '''
    buff = BytesIO()
    img.save(buff, 'ppm')
    contents = buff.getvalue()
    buff.close()

    loader = GdkPixbuf.PixbufLoader.new_with_type('pnm')
    loader.write(contents)
    pixbuf = loader.get_pixbuf()
    loader.close()
    return pixbuf

    @classmethod
    def ellipse(cls, radius):
    '''
    :type radius int
    '''
    image = Image.new("RGBA", (300, 300), "white")
    draw = ImageDraw.Draw(image)
    minor = 150 - radius
    major = 150 + radius
    draw.ellipse((minor, minor, major, major), outline='red')
    pixbuf = ImageView.imgToPixbuf(image)
    return pixbuf

    def __init__(self, model, image):
    self.model = model
    self.image = image

    def update(self):
    radius = self.model.getRadius()
    pixbuf = ImageView.ellipse(radius)
    self.image.set_from_pixbuf(pixbuf)


    class MainWindow(Gtk.Window):
    '''
    主窗口類
    負責整體界面的顯示
    '''

    def textCallback(self, widget, controller):
    '''
    文本輸入回調(diào)
    '''
    try:
    radius = float(widget.get_text())
    controller.setRadius(radius)
    except ValueError as e:
    pass

    def scaleCallback(self, widget, controller):
    '''
    拖動條回調(diào)
    '''
    radius = widget.get_value()
    controller.setRadius(radius)

    def __init__(self):
    Gtk.Window.__init__(self, title="Title")

    self.set_default_size(600, 400)
    self.set_position(Gtk.WindowPosition.CENTER)

    hbox = Gtk.HBox(spacing=5)
    self.add(hbox)

    vbox = Gtk.VBox(spacing=5)
    hbox.pack_start(vbox, True, True, 2)

    table = Gtk.Table.new(4, 2, False)
    vbox.pack_start(table, True, True, 2)

    label = Gtk.Label('半徑:')
    table.attach_defaults(label, 0, 1, 0, 1)
    label = Gtk.Label('周長:')
    table.attach_defaults(label, 0, 1, 1, 2)
    label = Gtk.Label('面積:')
    table.attach_defaults(label, 0, 1, 2, 3)
    label = Gtk.Label('體積:')
    table.attach_defaults(label, 0, 1, 3, 4)

    self.radiusEntry = Gtk.Entry.new()
    self.radiusEntry.connect('changed', self.textCallback, controller)
    table.attach_defaults(self.radiusEntry, 1, 2, 0, 1)
    self.perimeterEntry = Gtk.Entry.new()
    self.perimeterEntry.set_sensitive(False)
    self.perimeterEntry.set_text('周長')
    table.attach_defaults(self.perimeterEntry, 1, 2, 1, 2)
    self.areaEntry = Gtk.Entry.new()
    self.areaEntry.set_sensitive(False)
    self.areaEntry.set_text('面積')
    table.attach_defaults(self.areaEntry, 1, 2, 2, 3)
    self.volumeEntry = Gtk.Entry.new()
    self.volumeEntry.set_sensitive(False)
    self.volumeEntry.set_text('體積')
    table.attach_defaults(self.volumeEntry, 1, 2, 3, 4)

    self.scale = Gtk.HScale.new_with_range(0, 100, 1)
    self.scale.connect('value-changed', self.scaleCallback, controller)
    vbox.pack_start(self.scale, False, False, 2)

    pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 300, 300)
    pixbuf.fill(0xaaaaaaaa)
    self.image = Gtk.Image.new_from_pixbuf(pixbuf)
    hbox.pack_start(self.image, True, True, 2)

    self.connect('delete-event', Gtk.main_quit)


    model = Model()
    controller = Controller(model)

    if __name__ == '__main__':
    Gdk.threads_init()
    Gdk.threads_enter()
    win = MainWindow()

    iv = ImageView(model, win.image)
    controller.addObserver(iv)

    tv = TextView(model, win.radiusEntry, win.perimeterEntry, win.areaEntry, win.volumeEntry)
    controller.addObserver(tv)

    sv = ScaleView(model, win.scale)
    controller.addObserver(sv)

    win.show_all()
    Gtk.main()
    Gdk.threads_leave()

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    python計算圓周長、面積、球體體積并畫出圓

    python計算圓周長、面積、球體體積并畫出圓:輸入半徑,計算圓的周長、面積、球體體積,并畫出這個圓。拖動條、輸入框和圖像控件的數(shù)據(jù)保持一致! Fedora下測試通過 代碼如下:#https://github.com/RobberPhex/GTK-Example-CalcAreafrom gi.repository import Gtk, Gdk,
    推薦度:
    標簽: 面積 周長 求圓
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 欧美精品亚洲人成在线观看| 色国产精品一区在线观看| 亚洲AⅤ永久无码精品AA| 国产精品美女久久久| 全国精品一区二区在线观看| 亚洲综合国产精品| 国产精品无码无在线观看| 亚洲精品高清在线| 精品人妻无码专区中文字幕| 一区二区三区精品国产欧美| 国产国拍亚洲精品mv在线观看| 最新精品露脸国产在线 | 亚洲精品无码mv在线观看网站| 国产成人精品午夜福麻豆| 国产亚洲精品一品区99热| 国产麻豆精品久久一二三| 午夜欧美精品久久久久久久| 欧美精品三区| 精品久久久久久国产三级| 国产成人精品综合久久久| 久久久精品一区二区三区| 国产短视频精品一区二区三区| 精品蜜臀久久久久99网站| 日韩人妻无码精品久久免费一| 亚洲国产精品日韩| 亚洲国产成人精品无码久久久久久综合 | 色久综合网精品一区二区| 欧美精品黑人粗大视频| 国内精品久久久久久久影视麻豆| 日本精品一区二区三区在线观看 | 精品久久8x国产免费观看| 亚洲精品无码久久久久久| 亚洲精品国产精品国自产观看| 欧美日韩国产成人高清视频,欧美日韩在线精品一| 国产精品免费视频观看拍拍| 久久国产精品久久| 欧美精品天天操| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 亚洲动漫精品无码av天堂| 伊人久久综合精品无码AV专区| 亚洲精品无码专区久久久|