導航:首頁 > 編程語言 > 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繪圖兩個圓代碼相關的資料

熱點內容
手機電影在線觀看哪個好 瀏覽:108
java移植的安卓游戲 瀏覽:724
vs編譯時系統資源不足 瀏覽:485
成人動漫電影 免費網站 瀏覽:664
ipad的app如何分屏 瀏覽:327
vb解析演算法 瀏覽:529
f盤總出現新建文件夾 瀏覽:940
女主勾人三觀不正快穿 瀏覽:203
vlc命令 瀏覽:699
如何搜尋mc伺服器 瀏覽:948
論壇觸屏手機版文件夾是哪個 瀏覽:407
mac命令刪除文件夾 瀏覽:814
退休職工醫保怎麼演算法 瀏覽:740
免費愛情片中文字幕 瀏覽:566
linux判斷字元串為空 瀏覽:202
鬼片小電影在線 瀏覽:29
如何看搶版電影 瀏覽:967
粵語影視app推薦 瀏覽:465
電影營免費完整版 瀏覽:232
如何關閉app的推送通知 瀏覽:533