<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 在 PySide 中繪圖 > 原文: [http://zetcode.com/gui/pysidetutorial/drawing/](http://zetcode.com/gui/pysidetutorial/drawing/) 當我們要更改或增強現有的小部件時,使用繪圖。 或者,如果我們要從頭開始創建自定義窗口小部件。 要進行繪制,我們使用 PySide 工具箱提供的繪制 API。 繪圖是在`paintEvent()`方法中完成的。 繪圖代碼放置在`QtGui.QPainter`對象的`begin()`和`end()`方法之間。 ## 繪制文字 我們首先在窗口客戶區上繪制一些 Unicode 文本。 ```py #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PySide tutorial In this example, we draw text in Russian azbuka. author: Jan Bodnar website: zetcode.com last edited: August 2011 """ import sys from PySide import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.text = u'\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\ \u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\ \u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430' self.setGeometry(300, 300, 280, 170) self.setWindowTitle('Draw text') self.show() def paintEvent(self, event): qp = QtGui.QPainter() qp.begin(self) self.drawText(event, qp) qp.end() def drawText(self, event, qp): qp.setPen(QtGui.QColor(168, 34, 3)) qp.setFont(QtGui.QFont('Decorative', 10)) qp.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main() ``` 在我們的示例中,我們在西里爾字母中繪制了一些文本。 文本在垂直和水平方向上對齊。 ```py def paintEvent(self, event): ``` 繪制是在繪畫事件內完成的。 ```py qp = QtGui.QPainter() qp.begin(self) self.drawText(event, qp) qp.end() ``` `QtGui.QPainter`類負責所有低級繪圖。 所有繪圖方法都在`begin()`和`end()`方法之間。 實際繪圖將委托給`drawText()`方法。 ```py qp.setPen(QtGui.QColor(168, 34, 3)) qp.setFont(QtGui.QFont('Decorative', 10)) ``` 在這里,我們定義用于繪制文本的筆和字體。 ```py qp.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text) ``` `drawText()`方法在窗口上繪制文本。 繪畫事件的`rect()`方法返回需要更新的矩形。 ![Drawing Text](https://img.kancloud.cn/8a/ef/8aeff5a0eb1d44923b6d7ab9ce04d9be_288x198.jpg) 圖:繪制文本 ## 繪制點 點是可以繪制的最簡單的圖形對象。 這是窗口上的一個小地方。 ```py #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PySide tutorial In the example, we draw randomly 1000 red points on the window. author: Jan Bodnar website: zetcode.com last edited: August 2011 """ import sys, random from PySide import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 280, 170) self.setWindowTitle('Points') self.show() def paintEvent(self, e): qp = QtGui.QPainter() qp.begin(self) self.drawPoints(qp) qp.end() def drawPoints(self, qp): qp.setPen(QtCore.Qt.red) size = self.size() for i in range(1000): x = random.randint(1, size.width()-1) y = random.randint(1, size.height()-1) qp.drawPoint(x, y) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main() ``` 在我們的示例中,我們在客戶區域上隨機繪制了 1000 個紅點。 ```py qp.setPen(QtCore.Qt.red) ``` 我們將筆設置為紅色。 我們使用預定義的顏色常數。 ```py size = self.size() ``` 每次我們調整窗口大小時,都會生成一個繪制事件。 我們使用`size()`方法獲得窗口的當前大小。 我們使用窗口的大小將點分布在整個窗口的客戶區域中。 ```py qp.drawPoint(x, y) ``` 我們用`drawPoint()`方法畫點。 ![Points](https://img.kancloud.cn/16/f8/16f87abc4e6896cad62c4ea3ab8cae5c_288x198.jpg) 圖:點 ## 色彩 顏色是代表紅色,綠色和藍色(RGB)強度值的組合的對象。 有效的 RGB 值在 0 到 255 之間。我們可以通過多種方式定義顏色。 最常見的是 RGB 十進制值或十六進制值。 我們還可以使用 RGBA 值,代表紅色,綠色,藍色,Alpha。 在這里,我們添加了一些有關透明度的額外信息。 Alpha 值為 255 表示完全不透明,0 表示完全透明,例如顏色是不可見的。 ```py #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PySide tutorial This example draws three rectangles in three different colors. author: Jan Bodnar website: zetcode.com last edited: August 2011 """ import sys from PySide import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 350, 100) self.setWindowTitle('Colors') self.show() def paintEvent(self, e): qp = QtGui.QPainter() qp.begin(self) self.drawRectangles(qp) qp.end() def drawRectangles(self, qp): color = QtGui.QColor(0, 0, 0) color.setNamedColor('#d4d4d4') qp.setPen(color) qp.setBrush(QtGui.QColor(200, 0, 0)) qp.drawRect(10, 15, 90, 60) qp.setBrush(QtGui.QColor(255, 80, 0, 160)) qp.drawRect(130, 15, 90, 60) qp.setBrush(QtGui.QColor(25, 0, 90, 200)) qp.drawRect(250, 15, 90, 60) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main() ``` 在我們的示例中,我們繪制了 3 個彩色矩形。 ```py color = QtGui.QColor(0, 0, 0) color.setNamedColor('#d4d4d4') ``` 在這里,我們使用十六進制符號定義顏色。 ```py qp.setPen(color) ``` 上面定義的顏色用于筆,用于繪制形狀的輪廓。 ```py qp.setBrush(QtGui.QColor(200, 0, 0)) qp.drawRect(10, 15, 90, 60) ``` 在這里,我們定義了一個畫筆并繪制了一個矩形。 畫筆是基本圖形對象,用于繪制形狀的背景。 `drawRect()`方法接受四個參數。 前兩個是軸上的 x,y 值。 第三個和第四個參數是矩形的寬度和高度。 該方法使用當前的筆和當前的筆刷繪制一個矩形。 ![Colors](https://img.kancloud.cn/06/ff/06ffe5be632caaa2ba177548a69c1029_358x128.jpg) 圖:顏色 ## `QtGui.QPen` `QtGui.QPen`是基本圖形對象。 它用于繪制矩形,橢圓形,多邊形或其他形狀的線,曲線和輪廓。 ```py #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PySide tutorial This example draws three rectangles in three different colors. author: Jan Bodnar website: zetcode.com last edited: August 2011 """ import sys from PySide import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 280, 270) self.setWindowTitle('Pen styles') self.show() def paintEvent(self, e): qp = QtGui.QPainter() qp.begin(self) self.drawLines(qp) qp.end() def drawLines(self, qp): pen = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine) qp.setPen(pen) qp.drawLine(20, 40, 250, 40) pen.setStyle(QtCore.Qt.DashLine) qp.setPen(pen) qp.drawLine(20, 80, 250, 80) pen.setStyle(QtCore.Qt.DashDotLine) qp.setPen(pen) qp.drawLine(20, 120, 250, 120) pen.setStyle(QtCore.Qt.DotLine) qp.setPen(pen) qp.drawLine(20, 160, 250, 160) pen.setStyle(QtCore.Qt.DashDotDotLine) qp.setPen(pen) qp.drawLine(20, 200, 250, 200) pen.setStyle(QtCore.Qt.CustomDashLine) pen.setDashPattern([1, 4, 5, 4]) qp.setPen(pen) qp.drawLine(20, 240, 250, 240) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main() ``` 在我們的示例中,我們繪制了六條線。 線條以六種不同的筆樣式繪制。 有五種預定義的筆樣式。 我們還可以創建自定義筆樣式。 最后一行是使用自定義筆樣式繪制的。 ```py pen = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine) ``` 我們創建一個`QtGui.QPen`對象。 顏色是黑色。 寬度設置為 2 像素,以便我們可以看到筆樣式之間的差異。 `QtCore.Qt.SolidLine`是預定義的筆樣式之一。 ```py pen.setStyle(QtCore.Qt.CustomDashLine) pen.setDashPattern([1, 4, 5, 4]) qp.setPen(pen) ``` 在這里,我們定義了自定義筆樣式。 我們設置`QtCore.Qt.CustomDashLine`筆樣式并調用`setDashPattern()`方法。 數字列表定義樣式。 數字必須是偶數。 奇數定義筆劃線,偶數空格。 數字越大,空格或筆劃線越大。 我們的模式是 1px 筆劃線 4px 空格 5px 筆劃線 4px 空格等。 ![Pen Styles](https://img.kancloud.cn/84/25/84256398c996c0d4052228978258a4a8_288x298.jpg) 圖:筆的樣式 ## `QtGui.QBrush` `QtGui.QBrush`是基本圖形對象。 它用于繪制圖形形狀的背景,例如矩形,橢圓形或多邊形。 刷子可以是三種不同的類型。 預定義的畫筆可以繪制漸變或紋理圖案。 ```py #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PySide tutorial This example draws 9 rectangles in different brush styles. author: Jan Bodnar website: zetcode.com last edited: August 2011 """ import sys from PySide import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 355, 280) self.setWindowTitle('Brushes') self.show() def paintEvent(self, e): qp = QtGui.QPainter() qp.begin(self) self.drawBrushes(qp) qp.end() def drawBrushes(self, qp): brush = QtGui.QBrush(QtCore.Qt.SolidPattern) qp.setBrush(brush) qp.drawRect(10, 15, 90, 60) brush.setStyle(QtCore.Qt.Dense1Pattern) qp.setBrush(brush) qp.drawRect(130, 15, 90, 60) brush.setStyle(QtCore.Qt.Dense2Pattern) qp.setBrush(brush) qp.drawRect(250, 15, 90, 60) brush.setStyle(QtCore.Qt.Dense3Pattern) qp.setBrush(brush) qp.drawRect(10, 105, 90, 60) brush.setStyle(QtCore.Qt.DiagCrossPattern) qp.setBrush(brush) qp.drawRect(10, 105, 90, 60) brush.setStyle(QtCore.Qt.Dense5Pattern) qp.setBrush(brush) qp.drawRect(130, 105, 90, 60) brush.setStyle(QtCore.Qt.Dense6Pattern) qp.setBrush(brush) qp.drawRect(250, 105, 90, 60) brush.setStyle(QtCore.Qt.HorPattern) qp.setBrush(brush) qp.drawRect(10, 195, 90, 60) brush.setStyle(QtCore.Qt.VerPattern) qp.setBrush(brush) qp.drawRect(130, 195, 90, 60) brush.setStyle(QtCore.Qt.BDiagPattern) qp.setBrush(brush) qp.drawRect(250, 195, 90, 60) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main() ``` 在我們的示例中,我們使用 9 種不同的畫筆樣式繪制 9 個不同的矩形。 ```py brush = QtGui.QBrush(QtCore.Qt.SolidPattern) qp.setBrush(brush) qp.drawRect(10, 15, 90, 60) ``` 我們定義一個筆刷對象。 將其設置為畫家對象。 并繪制調用`drawRect()`方法的矩形。 這是圖片中顯示的第一個矩形。 ![Brushes](https://img.kancloud.cn/4a/83/4a83a2707ff5ed6e3a45cd9292447816_363x308.jpg) 圖:筆刷 在 PySide 教程的這一部分中,我們做了一些基本的繪圖。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看