quelle est la meilleure façon de dessiner un rectangle arrondi dans une application pygtkrectangle arrondi dans pygtk
0
A
Répondre
0
probablement pycairo
5
#!/usr/bin/env python
import gtk
def rounded_rectangle(cr, x, y, w, h, r=20):
# This is just one of the samples from
# http://www.cairographics.org/cookbook/roundedrectangles/
# A****BQ
# H C
# * *
# G D
# F****E
cr.move_to(x+r,y) # Move to A
cr.line_to(x+w-r,y) # Straight line to B
cr.curve_to(x+w,y,x+w,y,x+w,y+r) # Curve to C, Control points are both at Q
cr.line_to(x+w,y+h-r) # Move to D
cr.curve_to(x+w,y+h,x+w,y+h,x+w-r,y+h) # Curve to E
cr.line_to(x+r,y+h) # Line to F
cr.curve_to(x,y+h,x,y+h,x,y+h-r) # Curve to G
cr.line_to(x,y+r) # Line to H
cr.curve_to(x,y,x,y,x+r,y) # Curve to A
def expose(canvas, event):
# Create cairo context
cr = canvas.window.cairo_create()
# Restrict drawing to the exposed area, so that
# no unnecessary drawing is done
cr.rectangle(event.area.x, event.area.y,
event.area.width, event.area.height)
cr.clip()
rounded_rectangle(cr, 100, 100, 100, 100)
cr.set_line_width(4.0)
cr.set_source_rgb(1.0, 0.0, 0.0)
cr.stroke_preserve()
cr.set_source_rgb(1.0, 0.5, 0.5)
cr.fill()
# Construct window
window = gtk.Window()
canvas = gtk.DrawingArea()
canvas.set_size_request(300, 300)
canvas.connect('expose-event', expose)
window.connect('delete-event', gtk.main_quit)
window.add(canvas)
window.show_all()
gtk.main()
1
Coïncidence, je mets, moi-même, un extrait de code sur la même page de tutoriel cité dans le code de @ptomato. L'avantage est l'utilisation de arc
au lieu de curve
, car il va créer de vrais coins d'arc de cercle. Ici, il va:
def draw_rounded(cr, area, radius):
""" draws rectangles with rounded (circular arc) corners """
from math import pi
a,b,c,d=area
cr.arc(a + radius, c + radius, radius, 2*(pi/2), 3*(pi/2))
cr.arc(b - radius, c + radius, radius, 3*(pi/2), 4*(pi/2))
cr.arc(b - radius, d - radius, radius, 0*(pi/2), 1*(pi/2)) # ;o)
cr.arc(a + radius, d - radius, radius, 1*(pi/2), 2*(pi/2))
cr.close_path()
cr.stroke()
################################################################
### EXAMPLE
import cairo, Image
w,h = 800, 600
offset = 100
fig_size = (w,h)
# an area with coordinates of
# (top, bottom, left, right) edges in absolute coordinates:
inside_area = (offset, w-offset, offset, h-offset)
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, *fig_size)
cr = cairo.Context(surface)
cr.set_line_width(3)
cr.set_source_rgb(1,1,1)
draw_rounded(cr, inside_area, 150)
im = Image.frombuffer("RGBA",
fig_size,
surface.get_data(),
"raw",
"BGRA",
0,1)
im.show()
Questions connexes
- 1. Différence d'utilisation du rectangle arrondi et du rectangle normal
- 2. Rectangle arrondi avec couleur de dégradé
- 3. Remplissage d'un rectangle partiellement avec GDI Arrondi +
- 4. Haut de rectangle arrondi ne fonctionne pas
- 5. Comment créer un rectangle arrondi en ligne pointillée dans Flex?
- 6. Comment dessiner et remplir un rectangle arrondi dans Rebol
- 7. Comment dessiner un rectangle arrondi dans Core Graphics/Quartz 2D?
- 8. Calcul de la ligne extérieure par un rectangle arrondi
- 9. UIVoir avec rectangle arrondi et ombre portée: l'ombre apparaît au-dessus du rectangle
- 10. Comment ajouter une forme de rectangle arrondi (ou Box) dans l'interface iphone?
- 11. Dessiner un triangle arrondi dans le mélange
- 12. Événement Visibility_notify dans pyGTK
- 13. Arrondi dans Ada
- 14. Arrondi incohérent dans Ruby?
- 15. Arrondi dans PHP
- 16. comment créer un rectangle arrondi transparent en utilisant le contact de cacao?
- 17. SDK iPhone: comment dessiner un rectangle arrondi avec un dégradé semi-transparent et une ombre portée
- 18. Existe-t-il un code HTML qui afficherait une ellipse ou un rectangle arrondi?
- 19. Comment puis-je effacer les coins à l'extérieur d'un rectangle arrondi à l'aide du SDK iPhone?
- 20. Comment dessiner un rectangle arrondi avec une bordure de largeur variable à l'intérieur de limites spécifiques
- 21. CellRenderCombo conditionnel dans pyGTK TreeView
- 22. threads séparés dans l'application pygtk
- 23. pyGame dans une application pyGTK
- 24. Arrondi UIBarButtonItems
- 25. Fonctions rectangle dans emacs
- 26. Rectangle dans Android
- 27. Comment puis-je obtenir un graphique rectangle arrondi pour couvrir toutes les colonnes dans une ligne d'en-tête ASP.NET GridView?
- 28. wpf contrôle personnalisé: draggable/redimensionnable rectangle dans un autre rectangle
- 29. Zone de texte riche arrondi sélection de coin arrondi
- 30. Socket Thread et PyGTK
Si vous allez peindre plusieurs fois (permet de dire ... une animation), vous devez utiliser le double tampon pour éviter flicks, vérifier ce code sur mon blog: http: // tinyurl .com/38vpgtw – markuz