最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python計(jì)算圓周長(zhǎng)、面積、球體體積并畫(huà)出圓

 更新時(shí)間:2014年04月08日 11:07:51   作者:  
這篇文章主要介紹了python計(jì)算圓周長(zhǎng)、面積、球體體積并畫(huà)出圓(python3+PyObject+Gtk實(shí)現(xiàn)界面聯(lián)動(dòng)),需要的朋友可以參考下

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

Fedora下測(cè)試通過(guò)

復(fù)制代碼 代碼如下:

#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:
    '''
    模型類(lèi)
    存儲(chǔ)半徑,計(jì)算周長(zhǎng)、面積、體積
    '''

    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:
    '''
    控制器類(lèi)
    控制視圖和模型的更新
    '''

    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:
    '''
    文字視圖類(lèi)
    處理文本輸入框的視圖
    '''

    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:
    '''
    拖動(dòng)條視圖
    處理拖動(dòng)條的視圖
    '''

    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):
    '''
    主窗口類(lèi)
    負(fù)責(zé)整體界面的顯示
    '''

    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):
        '''
        拖動(dòng)條回調(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('周長(zhǎng):')
        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('周長(zhǎng)')
        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()



相關(guān)文章

  • python?pyvis庫(kù)創(chuàng)建可視化交互式網(wǎng)絡(luò)圖

    python?pyvis庫(kù)創(chuàng)建可視化交互式網(wǎng)絡(luò)圖

    這篇文章主要為大家介紹了python?pyvis庫(kù)創(chuàng)建可視化交互式網(wǎng)絡(luò)圖,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • python實(shí)現(xiàn)分頁(yè)效果

    python實(shí)現(xiàn)分頁(yè)效果

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)分頁(yè)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Python中跳臺(tái)階、變態(tài)跳臺(tái)階與矩形覆蓋問(wèn)題的解決方法

    Python中跳臺(tái)階、變態(tài)跳臺(tái)階與矩形覆蓋問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于Python中跳臺(tái)階、變態(tài)跳臺(tái)階與矩形覆蓋問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 詳解Python中for循環(huán)是如何工作的

    詳解Python中for循環(huán)是如何工作的

    如果你對(duì)python中的for循環(huán)不是很清楚,那么建議你看看這篇文章,本文主要給大家介紹了關(guān)于Python中for循環(huán)是如何工作的相關(guān)資料,介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • 淺談Django前端后端值傳遞問(wèn)題

    淺談Django前端后端值傳遞問(wèn)題

    這篇文章主要介紹了淺談Django前端后端值傳遞問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • python實(shí)現(xiàn)心型照片墻效果

    python實(shí)現(xiàn)心型照片墻效果

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)心型照片墻效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Python requests庫(kù)用法實(shí)例詳解

    Python requests庫(kù)用法實(shí)例詳解

    這篇文章主要介紹了Python requests庫(kù)用法,結(jié)合實(shí)例形式分析了Request庫(kù)的功能、安裝、請(qǐng)求創(chuàng)建、響應(yīng)等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • 用Python分析3天破10億的《我不是藥神》到底神在哪?

    用Python分析3天破10億的《我不是藥神》到底神在哪?

    我不是藥神這部劇真的是很火,三天破10億。接下來(lái)腳本之家小編給大家?guī)?lái)了用Python來(lái)看3天破10億的《我不是藥神》到底神在哪?感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-07-07
  • python list 查詢是否存在并且并返回下標(biāo)的操作

    python list 查詢是否存在并且并返回下標(biāo)的操作

    這篇文章主要介紹了python list 查詢是否存在并且并返回下標(biāo)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python實(shí)現(xiàn)dbscan算法

    python實(shí)現(xiàn)dbscan算法

    DBSCAN 算法是一種基于密度的空間聚類(lèi)算法,本文主要介紹了python實(shí)現(xiàn)dbscan算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評(píng)論

广饶县| 青阳县| 淮滨县| 田东县| 武宣县| 巴马| 成安县| 赫章县| 新龙县| 双辽市| 利津县| 崇州市| 柏乡县| 庄河市| 文水县| 衡山县| 中阳县| 奈曼旗| 得荣县| 田阳县| 西华县| 保定市| 黄山市| 额尔古纳市| 页游| 兰西县| 阜新| 宁南县| 沁水县| 滕州市| 太和县| 平湖市| 连城县| 民丰县| 鹿泉市| 聂荣县| 徐州市| 祥云县| 昭苏县| 建始县| 衡山县|