0

我正在尝试在我的 macbook 上的 IDLE 中从 pythonista 绘图应用程序示例运行以下脚本,但收到错误“ModuleNotFoundError: No module named 'ui'”

UI 本身的网站: https ://omz-software.com/pythonista/docs/ios/ui.html

我似乎找不到这个 ui 的任何安装程序,并且希望得到任何帮助,因为它在我的 ipad 上运行,所以我只想看看它是如何在我的 mac 上运行的。

import ui
import photos
import console

# The PathView class is responsible for tracking
# touches and drawing the current stroke.
# It is used by SketchView.

class PathView (ui.View):
    def __init__(self, frame):
        self.frame = frame
        self.flex = 'WH'
        self.path = None
        self.action = None
    
    def touch_began(self, touch):
        x, y = touch.location
        self.path = ui.Path()
        self.path.line_width = 8.0
        self.path.line_join_style = ui.LINE_JOIN_ROUND
        self.path.line_cap_style = ui.LINE_CAP_ROUND
        self.path.move_to(x, y)
    
    def touch_moved(self, touch):
        x, y = touch.location
        self.path.line_to(x, y)
        self.set_needs_display()
    
    def touch_ended(self, touch):
        # Send the current path to the SketchView:
        if callable(self.action):
            self.action(self)
        # Clear the view (the path has now been rendered
        # into the SketchView's image view):
        self.path = None
        self.set_needs_display()
    
    def draw(self):
        if self.path:
            self.path.stroke()

# The main SketchView contains a PathView for the current
# line and an ImageView for rendering completed strokes.
# It also manages the 'Clear' and 'Save' ButtonItems that
# are shown in the title bar.

class SketchView (ui.View):
    def __init__(self, width=1024, height=1024):
        self.bg_color = 'white'
        iv = ui.ImageView(frame=(0, 0, width, height))
        pv = PathView(frame=self.bounds)
        pv.action = self.path_action
        self.add_subview(iv)
        self.add_subview(pv)
        save_button = ui.ButtonItem()
        save_button.title = 'Save Image'
        save_button.action = self.save_action
        clear_button = ui.ButtonItem()
        clear_button.title = 'Clear'
        clear_button.tint_color = 'red'
        clear_button.action = self.clear_action
        self.right_button_items = [save_button, clear_button]
        self.image_view = iv
    
    def path_action(self, sender):
        path = sender.path
        old_img = self.image_view.image
        width, height = self.image_view.width, self.image_view.height
        with ui.ImageContext(width, height) as ctx:
            if old_img:
                old_img.draw()
            path.stroke()
            self.image_view.image = ctx.get_image()
    
    def clear_action(self, sender):
        self.image_view.image = None
    
    def save_action(self, sender):
        if self.image_view.image:
            # We draw a new image here, so that it has the current
            # orientation (the canvas is quadratic).
            with ui.ImageContext(self.width, self.height) as ctx:
                self.image_view.image.draw()
                img = ctx.get_image()
                photos.save_image(img)
                console.hud_alert('Saved')
        else:
            console.hud_alert('No Image', 'error')
    
# We use a square canvas, so that the same image
# can be used in portrait and landscape orientation.
w, h = ui.get_screen_size()
canvas_size = max(w, h)

sv = SketchView(canvas_size, canvas_size)
sv.name = 'Sketch'
sv.present('fullscreen')
4

1 回答 1

1

你说的是 Pythonista 没有的 IDLE,所以我假设你是在 Pythonista 之外尝试这个。ui 模块是 Pythonista 的专有部分,不能单独安装。

如果你想在 Mac 上将 UIKit 类与 Python 一起使用,你要么需要一个新的 M1 Macbook,它可以运行你在 iPad 上运行的相同 Pythonista 应用程序,要么你必须看看Rubicon之类的东西来从 Python 桥接到 UIKit类,本质上是复制 Pythonista ui 模块的功能。

于 2021-01-03T22:54:15.643 回答