Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PyQt5 基本窗口控件(绘图类 / 拖拽 / 剪贴板 / 日历时间 / 菜单、工具、状态栏 / 打印)

PyQt5 基本窗口控件(绘图类 / 拖拽 / 剪贴板 / 日历时间 / 菜单、工具、状态栏 / 打印)

作者头像
Michael阿明
发布于 2022-05-10 01:50:04
发布于 2022-05-10 01:50:04
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcomputing.com/static/Docs/PyQt5

1. 窗口绘图类

1.1 QPainter

  • QWidget上执行绘图操作
  • QWidget.paintEvent() 中完成,绘制方法必须在 QtGui.QPainter对象的 begin()end() 之间
绘制文字
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/6 9:26
# @Author : Michael
# @File : painter1.py
# @desc :
import sys

from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt

class drawing_demo(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("绘图示例")
        self.resize(300, 300)
        self.text = "Hello 麦克"

    def paintEvent(self, event): # 函数名不能变
        painter = QPainter(self)
        painter.begin(self)  # 开始绘制, 需要传入 self
        self.drawText(event, painter) # 自定义绘制
        painter.end()

    def drawText(self, event, painter):
        painter.setPen(QColor(168, 150, 3)) # 设置画笔颜色
        painter.setFont(QFont("SimSun", 20))  # 设置字体
        painter.drawText(event.rect(), Qt.AlignCenter, self.text)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = drawing_demo()
    demo.show()
    sys.exit(app.exec_())
绘制点
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/6 9:56
# @Author : Michael
# @File : draw_point.py
# @desc :
import math

from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt


class drawPoint(QWidget):
    def __init__(self):
        super(drawPoint, self).__init__()
        self.setWindowTitle("绘制点")
        self.resize(500, 300)

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)  # 必须加 self 参数
        self.drawpoint(painter)
        painter.end()

    def drawpoint(self, painter):
        painter.setPen(Qt.red)
        size = self.size()
        print('size,', size)
        for i in range(1000):
            # 绘制正弦函数曲线
            x = int(100*(-1+2.0*i/1000)+size.width()/2)
            y = int(-50*math.sin((x-size.width()/2)*math.pi/50)+size.height()/2)
            painter.drawPoint(x, y)
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    main = drawPoint()
    main.show()
    sys.exit(app.exec_())

只要点击窗口或者窗口大小发生变化,就会进行重绘

1.2 QPen

钢笔,用于绘制曲线,直线,轮廓等

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/6 22:28
# @Author : Michael
# @File : qpen_demo.py
# @desc :
import sys

from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt


class qpenDemo(QWidget):
    def __init__(self):
        super(qpenDemo, self).__init__()
        self.setGeometry(300, 300, 280, 270)
        self.setWindowTitle("钢笔样式")

    def paintEvent(self, event):  # paintEvent 名字大小写需要一致,重写父类的方法
        painter = QPainter()
        painter.begin(self)  # 需要加入self
        self.drawlines(painter)
        painter.end()

    def drawlines(self, painter):
        pen = QPen(Qt.black, 2, Qt.SolidLine)

        painter.setPen(pen)
        painter.drawLine(20, 40, 250, 40)
        # 参数 线的起点终点 x1, y1 -> x2, y2, 且最终笔在 x2, y2

        pen.setStyle(Qt.DashLine)
        painter.setPen(pen)
        painter.drawLine(20, 80, 250, 80)

        pen.setStyle(Qt.DashDotLine)
        painter.setPen(pen)
        painter.drawLine(20, 120, 250, 120)

        pen.setStyle(Qt.DotLine)
        painter.setPen(pen)
        painter.drawLine(20, 160, 250, 160)

        pen.setStyle(Qt.DashDotDotLine)
        painter.setPen(pen)
        painter.drawLine(20, 200, 250, 200)

        pen.setStyle(Qt.CustomDashLine)
        pen.setDashPattern([1, 4, 5, 4]) 
        painter.setPen(pen)
        painter.drawLine(20, 240, 250, 240)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = qpenDemo()
    ex.show()
    sys.exit(app.exec_())

setDashPattern

The pattern must be specified as an even number of positive entries where the entries 1, 3, 5… are the dashes and 2, 4, 6… are the spaces.

1.3 QBrush

  • 用于填充形状,有预定义、纹理图案、过渡3种类型
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/6 22:58
# @Author : Michael
# @File : qbrush_demo.py
# @desc :

import sys

from PyQt5.QtGui import QPainter, QPen, QBrush, QColor, QFont
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt, QRect


class qpenDemo(QWidget):
    def __init__(self):
        super(qpenDemo, self).__init__()
        self.setGeometry(300, 300, 280, 270)
        self.setWindowTitle("钢笔样式")

    def paintEvent(self, event):  # paintEvent 名字大小写需要一致,重写父类的方法
        painter = QPainter()
        painter.begin(self)  # 需要加入self
        self.drawlines(painter)
        painter.end()

    def drawlines(self, painter):
        brush = QBrush(Qt.SolidPattern)
        painter.setBrush(brush)
        painter.drawRect(10, 15, 90, 60)
        painter.setPen(QColor(168, 150, 3))  # 设置画笔颜色
        painter.setFont(QFont("SimSun", 7))  # 设置字体
        painter.drawText(QRect(10, 65, 90, 60), Qt.AlignCenter, 'SolidPattern')

        brush.setStyle(Qt.Dense1Pattern)
        painter.setBrush(brush)
        painter.drawRect(130, 15, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(130, 65, 90, 60), Qt.AlignCenter, 'Dense1Pattern')

        brush.setStyle(Qt.Dense2Pattern)
        painter.setBrush(brush)
        painter.drawRect(250, 15, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(250, 65, 90, 60), Qt.AlignCenter, 'Dense2Pattern')

        brush.setStyle(Qt.Dense3Pattern)
        painter.setBrush(brush)
        painter.drawRect(10, 285, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(10, 335, 90, 60), Qt.AlignCenter, 'Dense3Pattern')

        brush.setStyle(Qt.DiagCrossPattern)
        painter.setBrush(brush)
        painter.drawRect(10, 105, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(10, 155, 120, 60), Qt.AlignCenter, 'DiagCrossPattern')

        brush.setStyle(Qt.Dense5Pattern)
        painter.setBrush(brush)
        painter.drawRect(130, 105, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(130, 155, 90, 60), Qt.AlignCenter, 'Dense5Pattern')

        brush.setStyle(Qt.Dense6Pattern)
        painter.setBrush(brush)
        painter.drawRect(250, 105, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(250, 155, 90, 60), Qt.AlignCenter, 'Dense6Pattern')

        brush.setStyle(Qt.HorPattern)
        painter.setBrush(brush)
        painter.drawRect(10, 195, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(10, 245, 90, 60), Qt.AlignCenter, 'HorPattern')

        brush.setStyle(Qt.VerPattern)
        painter.setBrush(brush)
        painter.drawRect(130, 195, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(130, 245, 90, 60), Qt.AlignCenter, 'VerPattern')

        brush.setStyle(Qt.BDiagPattern)
        painter.setBrush(brush)
        painter.drawRect(250, 195, 90, 60)
        painter.setPen(QColor(168, 150, 3))
        painter.setFont(QFont("SimSun", 7))
        painter.drawText(QRect(250, 245, 90, 60), Qt.AlignCenter, 'BDiagPattern')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = qpenDemo()
    ex.show()
    sys.exit(app.exec_())

1.4 QPixmap

  • 显示图像用的
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/6 23:20
# @Author : Michael
# @File : qpixmap.py
# @desc :
import sys

from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = QWidget()
    label1 = QLabel()
    label1.setPixmap(QPixmap('logo.png'))
    vbox = QVBoxLayout()
    vbox.addWidget(label1)
    win.setLayout(vbox)
    win.setWindowTitle('QPixmap')
    win.show()
    sys.exit(app.exec_())

2. 拖拽与剪贴板

2.1 拖拽

  • 允许拖拽的控件,需要设置 QWidget.setDragEnabled()True

MIME介绍 :https://baike.baidu.com/item/MIME/2900607?fr=aladdin

DragEnterEvent,当执行一个拖曳控件操作,并且鼠标指针进入该控件时,这个事件将被触发,在这个事件中可以获得被操作的窗口控件,还可以有条件地接受或拒绝该拖曳操作 DragMoveEvent,在拖曳操作进行时会触发该事件 DragLeaveEvent,当执行一个拖曳控件操作,并且鼠标指针离开该控件时,这个事件将被触发 DropEvent,当拖曳操作在目标控件上被释放时,这个事件将被触发

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/6 23:36
# @Author : Michael
# @File : drag_demo.py
# @desc :
from PyQt5.QtWidgets import QComboBox, QWidget, QFormLayout, QLabel, QLineEdit, QApplication


class combo(QComboBox):
    def __init__(self, title, parent):
        super(combo, self).__init__(parent)
        self.setAcceptDrops(True)
    def dragEnterEvent(self, e):  # 重写dragEnterEvent方法
        print(e, e.mimeData().text())
        if e.mimeData().hasText():
            e.accept()
        else:
            e.ignore()

    def dropEvent(self, e):
        self.addItem(e.mimeData().text())

class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        layout = QFormLayout()

        label = QLabel('把左边的文本拖拽到右边的下拉框中')
        layout.addRow(label)
        edit1 = QLineEdit("我是一个文本框")
        edit1.setDragEnabled(True)
        com = combo('button', self)
        layout.addRow(edit1, com)

        self.setLayout(layout)
        self.setWindowTitle('拖拽')
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

选中一些文字,按住 Ctrl 移动鼠标到 下拉列表处

2.2 剪贴板 QClipboard

  • QApplication类有一个静态方法clipboard(), 它返回对剪贴板对象的引用
  • 任何类型的MimeData都可以从 剪贴板 复制或粘贴

常用信号:dataChanged 剪贴板内容发生变化时 发射信号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/7 9:38
# @Author : Michael
# @File : clipboard_demo.py
# @desc :
import sys

from PyQt5.QtCore import QMimeData
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QDialog, QPushButton, QLabel, QGridLayout, QApplication


class myForm(QDialog):
    def __init__(self):
        super().__init__()

        textCopyButton = QPushButton("&Copy Text")
        textPasteButton = QPushButton("Paste &Text")
        htmlCopyButton = QPushButton("C&opy HTML")
        htmlPasteButton = QPushButton("Paste &HTML")
        imageCopyButton = QPushButton("Co&py Image")
        imagePasteButton = QPushButton("Paste &Image")

        self.textlabel = QLabel('原始文字')
        self.imagelabel = QLabel()
        self.imagelabel.setPixmap(QPixmap('../store.png'))

        layout = QGridLayout()
        layout.addWidget(textCopyButton, 0, 0)
        layout.addWidget(textPasteButton, 0, 1)
        layout.addWidget(htmlCopyButton, 1, 0)
        layout.addWidget(htmlPasteButton, 1, 1)
        layout.addWidget(imageCopyButton, 2, 0)
        layout.addWidget(imagePasteButton, 2, 1)
        layout.addWidget(self.textlabel, 3, 0, 1, 2)
        layout.addWidget(self.imagelabel, 4, 0, 1, 2)
        self.setLayout(layout)

        self.setWindowTitle("Clipboard Demo")
        textCopyButton.clicked.connect(self.copyText)
        textPasteButton.clicked.connect(self.pasteText)
        htmlCopyButton.clicked.connect(self.copyHtml)
        htmlPasteButton.clicked.connect(self.pasteHtml)
        imageCopyButton.clicked.connect(self.copyImage)
        imagePasteButton.clicked.connect(self.pasteImage)

    def copyText(self):
        clipboard = QApplication.clipboard()
        clipboard.setText("Hello PyQt5")

    def pasteText(self):
        clipboard = QApplication.clipboard()
        self.textlabel.setText(clipboard.text())

    def copyHtml(self):
        mimeData = QMimeData()
        mimeData.setHtml("<b><font color=red>你好,michael</font></b>")
        clipboard = QApplication.clipboard()
        clipboard.setMimeData(mimeData)

    def pasteHtml(self):
        clipboard = QApplication.clipboard()
        mimeData = clipboard.mimeData()
        if mimeData.hasHtml():
            self.textlabel.setText(mimeData.html())

    def copyImage(self):
        clipboard = QApplication.clipboard()
        clipboard.setPixmap(QPixmap('logo.png'))

    def pasteImage(self):
        clipboard = QApplication.clipboard()
        self.imagelabel.setPixmap(clipboard.pixmap())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = myForm()
    w.show()
    sys.exit(app.exec_())

3. 日历与时间

3.1 QCalendar

  • 日历控件,基于月的视图
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/8 19:40
# @Author : Michael
# @File : calendar_demo.py
# @desc :
from PyQt5.QtCore import QDate
from PyQt5.QtWidgets import QWidget, QCalendarWidget, QLabel, QApplication


class CalendarDemo(QWidget):
    def __init__(self):
        super(CalendarDemo, self).__init__()
        self.initUI()

    def initUI(self):
        self.cal = QCalendarWidget(self)
        self.cal.setGridVisible(True)
        self.cal.move(20, 50)
        self.cal.setMinimumDate(QDate(2000, 1, 1))
        self.cal.setMaximumDate(QDate(2100, 12, 31))
        self.cal.clicked[QDate].connect(self.showDate)
        self.label1 = QLabel(self)
        date = self.cal.selectedDate()
        self.label1.setText(date.toString('yyyy-MM-dd dddd'))
        self.label1.move(20, 10)
        self.setGeometry(300, 300, 300, 300)
        self.setWindowTitle('Calendar')

    def showDate(self, date):
        self.label1.setText(date.toString('yyyy-MM-dd dddd'))

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = CalendarDemo()
    w.show()
    sys.exit(app.exec_())

3.2 QDateTimeEdit

  • 一个允许用户编辑日期时间的控件

4. 菜单栏、工具栏、状态栏

4.1 菜单栏 QMenuBar

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/8 20:24
# @Author : Michael
# @File : menubar_demo.py
# @desc :
from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QAction, QApplication


class MenuBarDemo(QMainWindow):
    def __init__(self):
        super(MenuBarDemo, self).__init__()
        layout = QHBoxLayout()
        bar = self.menuBar() # 获取菜单栏

        file = bar.addMenu('文件') # 创建菜单栏文件菜单
        file.addAction('新建') # 在文件菜单中添加新建菜单

        save = QAction('保存', self) # 创建保存菜单
        save.setShortcut('Ctrl+S') # 设置快捷键
        file.addAction(save) # 在文件菜单中添加保存菜单

        edit = file.addMenu('编辑') # 在文件菜单中创建编辑菜单
        edit.addAction('复制') # 在编辑菜单中添加复制菜单
        edit.addAction('粘贴') # 在编辑菜单中添加粘贴菜单

        quit = QAction('退出', self) # 创建退出菜单
        quit.setShortcut('Ctrl+Q') # 设置快捷键
        file.addAction(quit) # 在文件菜单中添加退出菜单

        file.triggered[QAction].connect(self.processTrigger) # 菜单触发事件

        self.setLayout(layout)
        self.setWindowTitle('菜单栏demo')
    def processTrigger(self, q):
        print(q.text(), '被点击了')

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    win = MenuBarDemo()
    win.show()
    sys.exit(app.exec_())

4.2 工具栏 QToolBar

工具栏通常可移动,位于菜单栏下方

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/8 20:36
# @Author : Michael
# @File : toolbar_demo.py
# @desc :
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QMainWindow, QVBoxLayout, QAction, QApplication


class ToolBarDemo(QMainWindow):
    def __init__(self):
        super(ToolBarDemo, self).__init__()
        self.setWindowTitle('ToolBar')
        self.resize(300, 200)

        layout = QVBoxLayout()
        toolbar = self.addToolBar('文件')
        new = QAction(QIcon('../store.png'), '新建', self)
        toolbar.addAction(new)
        toolbar.actionTriggered[QAction].connect(self.toolbuttonPressed)
        open = QAction(QIcon('logo.png'), '打开', self)
        toolbar.addAction(open)

        self.setLayout(layout)

    def toolbuttonPressed(self, q):
        print("按下了:", q.text())

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    main = ToolBarDemo()
    main.show()
    sys.exit(app.exec_())

4.3 状态栏 QStatusBar

MainWindow 对象 底部保留有一个水平状态栏,显示永久 or 临时 信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/8 20:53
# @Author : Michael
# @File : statusBar_demo.py
# @desc :
from PyQt5.QtWidgets import QMainWindow, QAction, QTextEdit, QStatusBar, QApplication


class StatusBarDemo(QMainWindow):
    def __init__(self):
        super(StatusBarDemo, self).__init__()

        bar = self.menuBar()
        file = bar.addMenu('&File')
        file.addAction('&New')
        file.triggered[QAction].connect(self.processTrigger)

        self.setCentralWidget(QTextEdit())
        self.status_bar = QStatusBar()

        self.setWindowTitle("状态栏例子")
        self.setStatusBar(self.status_bar)

    def processTrigger(self, q):
        if q.text() == '&New':
            self.status_bar.showMessage(q.text() + ' was triggered', 3000)
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    main = StatusBarDemo()
    main.show()
    sys.exit(app.exec_())

5. QPrinter

其本质上也是一个绘图设备 QPaintDevice

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2022/5/8 21:14
# @Author : Michael
# @File : qprinter.py
# @desc :
from PyQt5.QtGui import QImage, QPixmap, QIcon, QPainter
from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
from PyQt5.QtWidgets import QMainWindow, QLabel, QSizePolicy, QAction, QApplication
from PyQt5.QtCore import Qt, QPoint


class printer_demo(QMainWindow):
    def __init__(self):
        super(printer_demo, self).__init__()
        self.setWindowTitle(self.tr("打印测试"))  # tr 函数用于以后翻译为其他语言
        self.imageLabel = QLabel()
        self.imageLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        self.setCentralWidget(self.imageLabel)

        self.image = QImage()
        self.createActions()
        self.createMenus()
        self.createToolBars()

        if self.image.load('logo.png'):
            self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
            self.resize(self.image.width(), self.image.height())
    def createActions(self):
        self.printAct = QAction(QIcon('../store.png'), self.tr("打印哦"), self)
        self.printAct.setShortcut('Ctrl+P')
        self.printAct.setStatusTip(self.tr("打印图像"))
        self.printAct.triggered.connect(self.printImage)

    def createMenus(self):
        printmenu = self.menuBar().addMenu(self.tr("打印菜单"))
        printmenu.addAction(self.printAct) #

    def createToolBars(self):
        printToolBar = self.addToolBar(self.tr("打印!"))
        printToolBar.addAction(self.printAct)

    def printImage(self):
        printer = QPrinter()
        printDialog = QPrintDialog(printer, self)
        if printDialog.exec_():
            print('打印中...')
            painter = QPainter(printer)
            rect = painter.viewport()
            print(rect)
            size = self.image.size()
            print(size)
            size.scale(rect.size(), Qt.KeepAspectRatio)
            print('after scale: ', size)
            painter.setViewport(rect.x(), rect.y(), size.width(), size.height())
            painter.setWindow(self.image.rect())
            print(self.image.rect())
            painter.drawImage(QPoint(0, 0), self.image)
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = printer_demo()
    window.show()
    sys.exit(app.exec_())
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL集群搭建实现高可用
MySQLCluster是MySQL适合于分布式计算环境的高实用、高冗余版本。Cluster的汉语是“集群”的意思。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。
萧晚歌
2020/08/19
3.4K0
【详解】MySQLCluster集群搭建详解
随着互联网的快速发展,数据量的爆炸式增长对数据库系统的性能和可靠性提出了更高的要求。传统的单机数据库已经难以满足大规模应用的需求。MySQL Cluster 是一种高可用、高性能的分布式数据库系统,它通过多节点复制和故障转移机制,提供了一个健壮的数据存储解决方案。本文将详细介绍如何搭建一个基本的 MySQL Cluster 集群。
大盘鸡拌面
2025/07/20
1950
mysql-cluster集群原理介绍和搭建步骤(四个data/sql节点) (转)「建议收藏」
MySQL簇概述MySQL簇是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的簇。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不
Java架构师必看
2022/04/02
3.2K0
mysql-cluster集群原理介绍和搭建步骤(四个data/sql节点) (转)「建议收藏」
MySQL NDB Cluster实战
前言 本文来自睿哲科技的张树杰同学分享MySQL NDB集群的基础知识和搭建,非常赞! 希望越来越多的同学一起来分享,帮助他人,也收获成长,每季度分享排名第一的同学有惊
大数据和云计算技术
2018/03/08
4.6K0
MySQL NDB Cluster实战
mysql集群搭建教程-mysql+windows篇
​搭建MySQL集群,首先看了一些关于集群的资料,然后根据步骤一步步的整,遇到了一些问题,在这里把我遇到的问题以及解决方法分享出来。​
张哥编程
2024/12/17
5930
mysql集群搭建教程-mysql+windows篇
MySQL集群:高可用性DBMS
如果你在寻找一个不会发生单点故障的数据库管理系统,那么水平拓展的MySQL集群分布式多主架构将是您的最佳选择。MySQL集群可以通过MySQL和NoSQL接口访问,并且可以用来服务密集的读/写工作。
和风
2018/05/22
2.3K0
MySQL集群:高可用性DBMS
高可用性、负载均衡的mysql集群解决方案
一、mysql的市场占有率 二、mysql为什么受到如此的欢迎 三、mysql数据库系统的优缺点 四、网络服务器的需求 五、什么是mysql的集群 六、什么是负载均衡 七、mysql集群部署和实现方法 八、负载均衡的配置和测试 九、Mysql集群系统的测试(测试方案+测试脚本+测试结果分析) l mysql的市场占有率 MySQL是世界上最流行的开源数据库,已有1100多万的击活安装,每天超过五万的下 载。MySQL为全球开发者、DBA和IT管理者在可靠性、性能、易用性方面提供了选 择。 第三方市场调查机
李海彬
2018/03/23
5.1K0
mysql集群之MYSQL CLUSTER
http://xuwensong.elastos.org/2014/01/13/ubuntu-%E4%B8%8Bmysql-cluster%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE/
全栈程序员站长
2022/09/06
3K0
mysql集群之MYSQL CLUSTER
【MySQL集群】——在Windows环境下配置MySQL集群
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/47441743
DannyHoo
2018/09/13
3.4K0
【MySQL集群】——在Windows环境下配置MySQL集群
手把手教你用Mysql-Cluster-7.5搭建数据库集群
当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载均衡的前提就是,各个服务器的数据库是数据同步的。在业务量不大的时候,我们会使用主从复制的方法实现服务器数据同步,一主多从或者是双主等,但是虽然进行了读写分离,但是对于读的方法限制还是比较大,所以解决数据同步的问题就是数据库集群的意义。我这里使用mysql官网提供的mysql-cluster实现集群。(到文章发布前的最新版本的安装教程,把网上踩的坑都踩过了一遍;)
MonroeCode
2018/01/10
1.9K0
MySQL数据库,详解MySQL分布式集群搭建
搭建MySQL分布式集群,例如:利用MySQL cluster ,MySQL proxy,MySQL replication,drdb等等,有人会问MySQL集群意义是什么呢?为一个数据库减轻负担,说白了就是减少sql排队队列中的sql的数量,举个例子:有10个sql请求,如果放在一个数据库服务器的排队队列中,他要等很长时间,如果把这10个sql请求,分配到5个数据库服务器的排队队列中,一个数据库服务器的队列中只有2个,这样等待时间是不是大大的缩短了呢?这已经很明显了。下面我们来看看如何具体的搭建一个MySQL分布式集群。
用户1289394
2021/03/29
3K0
mysql-cluster集群搭建
官方网站下载mysql-cluster-gpl-7.5.7-linux-glibc2.12-x86_64.tar.gz (mysql集群)
93年的老男孩
2019/12/18
1.7K0
如何在Ubuntu 18.04上创建多节点MySQL集群
MySQL Cluster分布式数据库为MySQL数据库管理系统提供高可用性和吞吐量。MySQL Cluster由一个或多个管理节点(ndb_mgmd)组成,这些节点存储集群的配置并控制ndbd存储集群数据的数据节点()。与管理节点通信后,客户端(MySQL客户端,服务器或本机API)直接连接到这些数据节点。
木纸鸢
2018/09/25
4.3K0
MySQL8 中文参考(八十九)
TCP/IP 是 NDB 集群中所有节点之间连接的默认传输机制。通常情况下,不需要定义 TCP/IP 连接;NDB 集群会自动为所有数据节点、管理节点以及 SQL 或 API 节点设置这些连接。
ApacheCN_飞龙
2024/06/26
2730
百度架构师是怎样搭建MySQL分布式集群?
MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。
慕容千语
2019/06/06
6090
百度架构师是怎样搭建MySQL分布式集群?
在Windows7中搭建Mysql Cluster
登录windows时最好用Administor登录(特别是管理节点,用其它用户登录了一次,之后就搭建不了,总是出现"修改不了一些文件的错误"),不然程序没有权限修改某些文件。
克虏伯
2019/04/15
2.2K0
Windows Server 2008R2配置MySQL Cluster
配置环境   VMware:(版本10.0.01)   操作系统:Windows Server 2008 R2 Enterprise   VM1:192.168.220.103 管理节点(MGM),数据节点(NDBD1),SQL节点(SQL1)   VM2:192.168.220.104 数据节点(NDBD2),SQL节点(SQL2)   MySQL Cluster版本:7.3.7 (MSI Installer)  下载地址:http://dev.mysql.com/downloads/cluste
Porschev
2018/01/16
1.8K0
Windows Server 2008R2配置MySQL Cluster
MySQL8 中文参考(八十七)
作为 NDB Cluster 的一部分的 MySQL 服务器在一个主要方面与普通(非集群)MySQL 服务器不同,即它使用NDB存储引擎。这个引擎有时也被称为NDBCLUSTER,尽管更倾向于使用NDB。
ApacheCN_飞龙
2024/06/26
3290
MySQL NDB Cluster介绍
最近翻译了好几篇关于NDB的文章,相信有很多人会有疑问,NDB Cluster究竟是个什么东西?它是一款新产品吗?它和InnoDB Cluster有什么不同?它是MySQL吗?它怎么使用?在这篇文章里,我将为大家介绍一下MySQL NDB Cluster是什么?它的架构和特征,以及它的适用场景。
MySQLSE
2020/09/28
6.2K0
MySQL NDB Cluster介绍
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
分区表是MySQL中一种将数据分散存储在多个物理子表中的技术,但从逻辑上看,它们仍然被当作一个表来对待。这种技术可以极大地提高大型数据库的性能、管理和可维护性。
红目香薰
2023/12/01
2820
推荐阅读
相关推荐
MySQL集群搭建实现高可用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验