导航:首页 > 编程语言 > python绘图两个圆代码

python绘图两个圆代码

发布时间:2024-03-29 06:37:17

‘壹’ python pyqt怎么画圆

这个例子我做了好几天:

1)官网C++的源码,改写成PyQt5版本的代码,好多细节不会转化

2)网上的PyQt的例子根本运行不了

填了无数个坑,结合二者,终于能完成了一个关于绘图的东西。这个过程也掌握了很多新的知识点

【知识点】

1、关于多个点的使用

poitns = [QPoint(10, 80), QPoint(20, 10), QPoint(80, 30), QPoint(90, 70)]

请看:

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class StockDialog(QWidget): def __init__(self, parent=None):
super(StockDialog, self).__init__(parent)
self.setWindowTitle("利用QPainter绘制各种图形")

mainSplitter = QSplitter(Qt.Horizontal)
mainSplitter.setOpaqueResize(True)

frame = QFrame(mainSplitter)
mainLayout = QGridLayout(frame) #mainLayout.setMargin(10)
mainLayout.setSpacing(6)

label1=QLabel("形状:")
label2=QLabel("画笔线宽:")
label3=QLabel("画笔颜色:")
label4=QLabel("画笔风格:")
label5=QLabel("画笔顶端:")
label6=QLabel("画笔连接点:")
label7=QLabel("画刷风格:")
label8=QLabel("画刷颜色:")

self.shapeComboBox = QComboBox()
self.shapeComboBox.addItem("Line", "Line")
self.shapeComboBox.addItem("Rectangle", "Rectangle")
self.shapeComboBox.addItem('Rounded Rectangle','Rounded Rectangle')
self.shapeComboBox.addItem('Ellipse','Ellipse')
self.shapeComboBox.addItem('Pie','Pie')
self.shapeComboBox.addItem('Chord','Chord')
self.shapeComboBox.addItem('Path','Path')
self.shapeComboBox.addItem('Polygon','Polygon')
self.shapeComboBox.addItem('Polyline','Polyline')
self.shapeComboBox.addItem('Arc','Arc')
self.shapeComboBox.addItem('Points','Points')
self.shapeComboBox.addItem('Text','Text')
self.shapeComboBox.addItem('Pixmap','Pixmap')

self.widthSpinBox = QSpinBox()
self.widthSpinBox.setRange(0,20)

self.penColorFrame = QFrame()
self.penColorFrame.setAutoFillBackground(True)
self.penColorFrame.setPalette(QPalette(Qt.blue))
self.penColorPushButton = QPushButton("更改")

self.penStyleComboBox = QComboBox()
self.penStyleComboBox.addItem("Solid",Qt.SolidLine)
self.penStyleComboBox.addItem('Dash', Qt.DashLine)
self.penStyleComboBox.addItem('Dot', Qt.DotLine)
self.penStyleComboBox.addItem('Dash Dot', Qt.DashDotLine)
self.penStyleComboBox.addItem('Dash Dot Dot', Qt.DashDotDotLine)
self.penStyleComboBox.addItem('None', Qt.NoPen)

self.penCapComboBox = QComboBox()
self.penCapComboBox.addItem("Flat",Qt.FlatCap)
self.penCapComboBox.addItem('Square', Qt.SquareCap)
self.penCapComboBox.addItem('Round', Qt.RoundCap)

self.penJoinComboBox = QComboBox()
self.penJoinComboBox.addItem("Miter",Qt.MiterJoin)
self.penJoinComboBox.addItem('Bebel', Qt.BevelJoin)
self.penJoinComboBox.addItem('Round', Qt.RoundJoin)

self.brushStyleComboBox = QComboBox()
self.brushStyleComboBox.addItem("Linear Gradient",Qt.LinearGradientPattern)
self.brushStyleComboBox.addItem('Radial Gradient', Qt.RadialGradientPattern)
self.brushStyleComboBox.addItem('Conical Gradient', Qt.ConicalGradientPattern)
self.brushStyleComboBox.addItem('Texture', Qt.TexturePattern)
self.brushStyleComboBox.addItem('Solid', Qt.SolidPattern)
self.brushStyleComboBox.addItem('Horizontal', Qt.HorPattern)
self.brushStyleComboBox.addItem('Vertical', Qt.VerPattern)
self.brushStyleComboBox.addItem('Cross', Qt.CrossPattern)
self.brushStyleComboBox.addItem('Backward Diagonal', Qt.BDiagPattern)
self.brushStyleComboBox.addItem('Forward Diagonal', Qt.FDiagPattern)
self.brushStyleComboBox.addItem('Diagonal Cross', Qt.DiagCrossPattern)
self.brushStyleComboBox.addItem('Dense 1', Qt.Dense1Pattern)
self.brushStyleComboBox.addItem('Dense 2', Qt.Dense2Pattern)
self.brushStyleComboBox.addItem('Dense 3', Qt.Dense3Pattern)
self.brushStyleComboBox.addItem('Dense 4', Qt.Dense4Pattern)
self.brushStyleComboBox.addItem('Dense 5', Qt.Dense5Pattern)
self.brushStyleComboBox.addItem('Dense 6', Qt.Dense6Pattern)
self.brushStyleComboBox.addItem('Dense 7', Qt.Dense7Pattern)
self.brushStyleComboBox.addItem('None', Qt.NoBrush)

self.brushColorFrame = QFrame()
self.brushColorFrame.setAutoFillBackground(True)
self.brushColorFrame.setPalette(QPalette(Qt.green))
self.brushColorPushButton = QPushButton("更改")

labelCol=0
contentCol=1
#建立布局
mainLayout.addWidget(label1,1,labelCol)
mainLayout.addWidget(self.shapeComboBox,1,contentCol)
mainLayout.addWidget(label2,2,labelCol)
mainLayout.addWidget(self.widthSpinBox,2,contentCol)
mainLayout.addWidget(label3,4,labelCol)
mainLayout.addWidget(self.penColorFrame,4,contentCol)
mainLayout.addWidget(self.penColorPushButton,4,3)
mainLayout.addWidget(label4,6,labelCol)
mainLayout.addWidget(self.penStyleComboBox,6,contentCol)
mainLayout.addWidget(label5,8,labelCol)
mainLayout.addWidget(self.penCapComboBox,8,contentCol)
mainLayout.addWidget(label6,10,labelCol)
mainLayout.addWidget(self.penJoinComboBox,10,contentCol)
mainLayout.addWidget(label7,12,labelCol)
mainLayout.addWidget(self.brushStyleComboBox,12,contentCol)
mainLayout.addWidget(label8,14,labelCol)
mainLayout.addWidget(self.brushColorFrame,14,contentCol)
mainLayout.addWidget(self.brushColorPushButton,14,3)
mainSplitter1 = QSplitter(Qt.Horizontal)
mainSplitter1.setOpaqueResize(True)

stack1 = QStackedWidget()
stack1.setFrameStyle(QFrame.Panel|QFrame.Raised)
self.area = PaintArea()
stack1.addWidget(self.area)
frame1 = QFrame(mainSplitter1)
mainLayout1 = QVBoxLayout(frame1) #mainLayout1.setMargin(10)
mainLayout1.setSpacing(6)
mainLayout1.addWidget(stack1)

layout = QGridLayout(self)
layout.addWidget(mainSplitter1,0,0)
layout.addWidget(mainSplitter,0,1)
self.setLayout(layout)
#信号和槽函数 self.shapeComboBox.activated.connect(self.slotShape)
self.widthSpinBox.valueChanged.connect(self.slotPenWidth)
self.penColorPushButton.clicked.connect(self.slotPenColor)
self.penStyleComboBox.activated.connect(self.slotPenStyle)
self.penCapComboBox.activated.connect(self.slotPenCap)
self.penJoinComboBox.activated.connect(self.slotPenJoin)
self.brushStyleComboBox.activated.connect(self.slotBrush)
self.brushColorPushButton.clicked.connect(self.slotBrushColor)

self.slotShape(self.shapeComboBox.currentIndex())
self.slotPenWidth(self.widthSpinBox.value())
self.slotBrush(self.brushStyleComboBox.currentIndex())

def slotShape(self,value):
shape = self.area.Shape[value]
self.area.setShape(shape)
def slotPenWidth(self,value):
color = self.penColorFrame.palette().color(QPalette.Window)
style = Qt.PenStyle(self.penStyleComboBox.itemData(self.penStyleComboBox.currentIndex(),Qt.UserRole))
cap = Qt.PenCapStyle(self.penCapComboBox.itemData(self.penCapComboBox.currentIndex(),Qt.UserRole))
join = Qt.PenJoinStyle(self.penJoinComboBox.itemData(self.penJoinComboBox.currentIndex(),Qt.UserRole))
self.area.setPen(QPen(color,value,style,cap,join))
def slotPenStyle(self,value):
self.slotPenWidth(value)
def slotPenCap(self,value):
self.slotPenWidth(value)
def slotPenJoin(self,value):
self.slotPenWidth(value)
def slotPenColor(self):
color = QColorDialog.getColor(Qt.blue)
self.penColorFrame.setPalette(QPalette(color))
self.area.setPen(QPen(color))
def slotBrushColor(self):
color = QColorDialog.getColor(Qt.blue)
self.brushColorFrame.setPalette(QPalette(color))
self.slotBrush(self.brushStyleComboBox.currentIndex())
def slotBrush(self,value):
color = self.brushColorFrame.palette().color(QPalette.Window)
style = Qt.BrushStyle(self.brushStyleComboBox.itemData(value,Qt.UserRole))
if(style == Qt.Lin

‘贰’ python 用eval(input)画这样四个圆 提示用户输入半径

python有两种编程方式,交互式和文件式。

交互式:对每个输入语句即时运行结果------适合语法练习

文件式:批量执行一组语句并运行结果------编程的主要方式

实例1:圆面积的计算(根据半径r计算圆面积)

字符串的使用

使用[ ]获取字符串中一个或多个字符

1 TempStr = input("请输入带有符号的温度值: ") 2 if TempStr[-1] in ['F', 'f']:#TempStr[-1]指的是最后一个字符 3 C = (eval(TempStr[0:-1]) - 32)/1.8#TempStr[0:-1]指的是字符串从第一个到最后一个之前的所有字符串 4 print("转换后的温度是{:.2f}C".format(C)) 5 elif TempStr[-1] in ['C', 'c']: 6 F = 1.8*eval(TempStr[0:-1]) + 32 7 print("转换后的温度是{:.2f}F".format(F)) 8 else: 9 print("输入格式错误")

数字类型:整数和浮点数

整数:数学中的整数

32或-89

浮点数:数学中的实数,带有小数部分

1.8或者-1.8或者-1.0

列表类型:由0个或多个数据组成的有序序列

列表使用[ ]表示,采用逗号分隔各元素

[ 'F' , 'f' ]表示列表里含义两个元素'F'和'f'

使用保留字in判断一个元素是否在列表中

TempStr[-1] in ['C' , 'c']判断前者是否与列表中的某个元素相同

赋值语句:由赋值符号构成的一行代码

赋值符号笔者之前提过,就是我们俗称的等于号,但等于号在编程语言中通常表示赋值,不表示等于号的含义。

1、赋值语句用来给变量赋予新的数据值

C = (eval(TempStr[0:-1]) - 32)/1.8 #右侧运算结果值赋值给C

2、赋值语句右侧的数据类型同时作用于变量

TempStr = input("请输入带有符号的温度值: ") #input返回一个字符串,所以TempStr也是字符串

分支语句:由判断条件决定程序运行方向的语句

1 if TempStr[-1] in ['F', 'f']:

如果条件为True则执行冒号后的语句

2、每个保留字所在行最后存在一个冒号:,是语法的一部分

冒号及后续缩进用来表示后续语句与条件的所属关系

函数:根据输入参数产生不同输出的功能过程

类似于数学中的函数,y=f(x)

print("输入格式错误") #打印出 输入格式错误

函数采用<函数名>(<参数>)的方式使用

1 eval(TempStr[0:-1])#TempStr[0:-1]是参数

python的输入输出

input():从控制台获得用户输入的函数

input()函数的使用格式:

1 <变量>=input (<提示信息字符串>)

用户输入的信息以字符串类型保存在<变量>中

1 TempStr=input("请输入") #TempStr保存用户输入的信息

输出函数print()

以字符形式向控制台输出结果的函数

print()函数的基本使用格式

1 print(<拟输出字符串或字符串变量>)

字符串类型的一对引号仅在程序内部使用,输出无引用

1 print("输入格式错误")#向控制台输出 输入格式错误

print函数的格式化:

1 print("转换后的温度是{:.2f}C".format(C))

{ }表示槽,后续变量填充到槽中

{:.2f}表示将变量C填充到这个位置时取小数点后2位

如果C的值是123.456789,则输出结果为123.45C

评估函数eval():去掉参数最外侧引号并执行余下语句的函数

eval的基本使用格式

1 eval(<字符串或字符串变量>)

>>>eval("1") 1

‘叁’ python怎么用turtle画圆

turtle.circle ()

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

‘肆’ python画同心圆并填充颜色

用海龟画图,代码如下:

import turtle
my_colors=('red','green','yellow','blue','black')
t=turtle.Pen()
for i in range(5):
t.penup()
t.goto(0,-i*10)
t.pendown()
t.color(my_colors[i%len(my_colors)])
t.circle(15+i*10)'''t.goto(0,0)
turtle.done()#程序执行完,窗口仍然在

‘伍’ Matlab或Python怎么作出两个圆的公切线

用sympy + matplot:

from sympy import Point, Circle, Line, var
import matplotlib.pyplot as plt

var('t')

c1 = Circle(Point(0, 0), 2)
c2 = Circle(Point(4, 4), 3)
l1 = Line(c1.center, c2.center)
p1 = l1.arbitrary_point(t).subs({t: -c1.radius / (c2.radius - c1.radius)})
p2 = l1.arbitrary_point(t).subs({t: c1.radius / (c1.radius + c2.radius)})
t1 = c1.tangent_lines(p1)
t2 = c1.tangent_lines(p2)
ta = t1 + t2

fig = plt.gcf()
ax = fig.gca()
ax.set_xlim((-10, 10))
ax.set_ylim((-10, 10))
ax.set_aspect(1)

cp1 = plt.Circle((c1.center.x, c1.center.y), c1.radius, fill = False)
cp2 = plt.Circle((c2.center.x, c2.center.y), c2.radius, fill = False)
tp = [0 for i in range(4)]
for i in range(4):
start = ta[i].arbitrary_point(t).subs({t:-10})
end = ta[i].arbitrary_point(t).subs({t:10})
tp[i] = plt.Line2D([start.x, end.x], [start.y, end.y], lw = 2)

ax.add_artist(cp1)
ax.add_artist(cp2)
for i in range(4):
ax.add_artist(tp[i])

‘陆’ Python如何画个正六边形,再画一个最小的外接圆和一个最大内接圆

Python可以使用turtle库来绘制图形,以下汪答是绘制正六边形、最小外接圆和最大内接圆的代码:

```python
import turtle
import math

# 创建画布
canvas = turtle.Screen()

# 创建画笔
pen = turtle.Turtle()

# 画正六边形
for i in range(6):
pen.forward(100)
pen.right(60)

# 计算正六边形的外接圆半径
r1 = 100 / math.sin(math.radians(30))

# 将画笔移动到圆心
pen.penup()
pen.goto(0, 0)
pen.pendown()

# 画最小外接圆
pen.circle(r1)

# 计算正六边形的内接圆半径
r2 = 100 * math.sqrt(3) / 3

# 画最大内接圆
pen.penup()
pen.goto(0, -r2)
pen.pendown()
pen.circle(r2)

# 隐藏画笔
pen.hideturtle()

# 关闭画布
canvas.exitonclick()
```

代码解析:

首先创建画布和画笔,然后使用循环画正六边形。接着根据正六边形的外接圆半径公式 $R = \frac{a}{\sin{(\frac{\pi}{n})}}$,计算出正六边形的外接圆半径 r1。将画笔移动到圆心,画最小外接圆。再根据正六边形的内切圆困仔慧半径公式 $r = \frac{a\sqrt{3}}{3}$,计算出正六边形的内戚槐接圆半径 r2。最后将画笔移动到内接圆底部,画最大内切圆。最后隐藏画笔并关闭画布。

运行以上代码就可以得到如下图所示的正六边形、最小外接圆和最大内接圆:

![正六边形、最小外接圆和最大内接圆](https://i.imgur.com/u6UWzBC.png)

‘柒’ python turtle画4个同心圆方法

importturtle
#drawfirstcircle
turtle.penup()
turtle.goto(0,-200)
turtle.pendown()
turtle.circle(200)
#drawsecondcircle
turtle.penup()
turtle.goto(0,-150)
turtle.pendown()
turtle.circle(150)
#drawthirdcircle
turtle.penup()
turtle.goto(0,-100)
turtle.pendown()
turtle.circle(100)
#drawfourthcircle
turtle.penup()
turtle.goto(0,-50)
turtle.pendown()
turtle.circle(50)


画笔的坐标默认在0,0,就以它为圆心。

因为turtle画圆的时候是从圆的底部开始画的,所以需要找到四个圆底部的坐标

比如:

第一个半径为200的圆,底部为(0,-200)

第二个半径为150的圆,底部为(0,-150)

第三个半径为100的圆,底部为(0,-100)

第四个半径为 50的圆,底部为(0, -50)


画的时候按下面的步骤:

  1. 抬起画笔:turtle.penup()

  2. 移动到相应坐标:turtle.goto(坐标)

  3. 放下画笔:turtle.pendown()

  4. 画圆:turtle.circle(半径)


效果如下图所示:



阅读全文

与python绘图两个圆代码相关的资料

热点内容
pdf与word文档区别 浏览:57
MC你如何将材质包装进服务器 浏览:701
单片机的外文资料 浏览:547
什么是白盒加密算法 浏览:804
乐书pdf 浏览:427
a星寻路算法在3d中 浏览:137
抗震等级不同箍筋加密区范围不同 浏览:471
xshell上传文件命令 浏览:781
优先级队列java 浏览:156
轻量化腾讯云服务器有什么用 浏览:462
编译原理自编译语言 浏览:425
闲鱼app为什么这么多 浏览:692
安卓手机玩游戏不卡怎么设置 浏览:568
编译链接装载书 浏览:539
面试腾讯公司程序员 浏览:110
一个字母y是什么app 浏览:144
魔兽大脚解压安装教程 浏览:10
超时代共享文件夹破解版 浏览:445
命令与征服红色警戒3攻略 浏览:728
解压缩jar包 浏览:588