【PyQt实例4】设置文体排序和对齐【转】

#-*- coding:utf-8 -*-
__author__ = 'shanshangzhiren'
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))

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

        self.setWindowTitle(self.tr("设置文体排序和对齐"))
        self.toolBar=self.addToolBar("List")

        self.label=QLabel(self.tr("列表:"))
        self.listBox=QComboBox(self.toolBar)#插入可选的排序方式
        self.listBox.addItem(self.tr("Standard"))
        self.listBox.addItem(self.tr("Bullet List (Disc)"))
        self.listBox.addItem(self.tr("Bullet List (Circle)"))
        self.listBox.addItem(self.tr("Bullet List (Square)"))
        self.listBox.addItem(self.tr("Ordered List (Decimal)"))
        self.listBox.addItem(self.tr("Ordered List (Alpha lower)"))
        self.listBox.addItem(self.tr("Ordered List (Alpha upper"))
        self.toolBar.addWidget(self.label)
        self.toolBar.addWidget(self.listBox)

        self.toolBar.addSeparator()

        self.actGrp=QActionGroup(self)#加入QActionGroup中的,互斥
        self.leftAction=QAction(QIcon("images/left.png"),self.tr("左"),self.actGrp)
        self.leftAction.setCheckable(True)

        self.centerAction=QAction(QIcon("images/center.png"),self.tr("局中"),self.actGrp)
        self.centerAction.setCheckable(True)

        self.justifyAction=QAction(QIcon("images/justify.png"),self.tr("两端对齐"),self.actGrp)
        self.justifyAction.setCheckable(True)

        self.rightAction=QAction(QIcon("images/right.png"),self.tr("右"),self.actGrp)
        self.rightAction.setCheckable(True)

        self.toolBar.addActions(self.actGrp.actions())

        self.editBar=self.addToolBar("Edit")
        self.undoAction=QAction(QIcon("images/undo.png"),self.tr("取消"),self)
        self.editBar.addAction(self.undoAction)
        self.redoAction=QAction(QIcon("images/redo.png"),self.tr("重做"),self)
        self.editBar.addAction(self.redoAction)

        self.text=QTextEdit()
        self.text.setFocus()
        self.setCentralWidget(self.text)

        self.connect(self.listBox,SIGNAL("activated(int)"),self.slotList)
        self.connect(self.leftAction,SIGNAL("triggered()"),self.slotLeftAction)
        self.connect(self.centerAction,SIGNAL("triggered()"),self.slotCenterAction)
        self.connect(self.justifyAction,SIGNAL("triggered()"),self.slotJustifyAction)
        self.connect(self.rightAction,SIGNAL("triggered()"),self.slotRightAction)
        self.connect(self.redoAction,SIGNAL("triggered()"),self.text,SLOT("redo()"))
        self.connect(self.undoAction,SIGNAL("triggered()"),self.text,SLOT("undo()"))
        self.connect(self.text.document(),SIGNAL("redoAvailable(bool)"),self.redoAction,SLOT("setEnabled(bool)"))
        self.connect(self.text.document(),SIGNAL("undoAvailable(bool)"),self.undoAction,SLOT("setEnabled(bool)"))
        self.connect(self.text,SIGNAL("cursorPositionChanged()"),self.slotCursorPositionChanged)#鼠标点中文本时,显示文本的对齐属性

    def slotLeftAction(self):
        self.text.setAlignment(Qt.AlignLeft)
        print("slotLeftAction")

    def slotCenterAction(self):
        self.text.setAlignment(Qt.AlignCenter)
        print("slotAlignCenter")

    def slotJustifyAction(self):
        self.text.setAlignment(Qt.AlignJustify)
        print("slotAlignJustify")

    def slotRightAction(self):
        self.text.setAlignment(Qt.AlignRight)
        print("slotAlignRight")

    def slotList(self,index):
        cursor=self.text.textCursor()
        if index!=0:
            style=QTextListFormat.ListDisc
            if index==1:
                style=QTextListFormat.ListDisc
            if index==2:
                style=QTextListFormat.ListCircle
            if index==3:
                style=QTextListFormat.ListSquare
            if index==4:
                style=QTextListFormat.ListDecimal
            if index==5:
                style=QTextListFormat.ListLowerAlpha
            if index==6:
                style=QTextListFormat.ListUpperAlpha
            cursor.beginEditBlock()
            blockFmt=cursor.blockFormat()
            listFmt=QTextListFormat()

            if cursor.currentList():
                listFmt=cursor.currentList().format()
            else:
                listFmt.setIndent(blockFmt.indent()+1)
                blockFmt.setIndent(0)
                cursor.setBlockFormat(blockFmt)

            listFmt.setStyle(style)
            cursor.createList(listFmt)
            cursor.endEditBlock()

        else:
            bfmt=QTextBlockFormat()
            bfmt.setObjectIndex(-1)
            cursor.mergeBlockFormat(bfmt)

    def slotCursorPositionChanged(self):
        if self.text.alignment()==Qt.AlignLeft:
            self.leftAction.setChecked(True)
        if self.text.alignment()==Qt.AlignCenter:
            self.centerAction.setChecked(True)
        if self.text.alignment()==Qt.AlignJustify:
            self.justifyAction.setChecked(True)
        if self.text.alignment()==Qt.AlignRight:
            self.rightAction.setChecked(True)
        print("slotCursorPositionChanged")

if __name__=="__main__":
    app=QApplication(sys.argv)
    main=myListAlign()
    main.show()
    app.exec_()

当你在PyQt5中使用QTableWidget时,如果遇到选中单元格后换行消失的问题,这通常是由于QTableWidgetItem的默认设置或是布局管理器的影响。QTableWidget通常使用FlowLayout作为其内部的布局策略,这种布局在显示内容时会尽量保持单行显示。 如果你想要允许单元格跨行显示,可以考虑以下解决步骤: 1. **设置单元格的大小**:在创建QTableWidgetItem时,你可以为其指定自定义宽度,以便能容纳更长的内容。例如: ```python item = QTableWidgetItem("这是一个很长很长的文字") item.setFlags(item.flags() | Qt.ItemIsSelectable) # 添加可选择属性 width = 400 # 根据需要调整宽度 item.setSizeHint(QSize(width, item.sizeHint().height())) ``` 2. **使用其他布局**:如果你想完全控制表格的行为,可以尝试使用其他的布局,如`QFormLayout`或`QGridLayout`,它们可以更好地处理换行。 3. **禁用自动换行**:虽然这不是标准做法,但在某些特定场景下,你也可以通过修改`QTableWidgetItem`的样式来阻止文本自动换行,然后手动添加换行符`\n`: ```python item.setText("\n这是文本分段,每段单独一行\n") ``` 4. **事件处理器**:如果是在用户交互时触发的换行消失,你可以在`cellClicked`等信号连接的槽函数中处理文字展示,例如动态更新单元格内容。 请注意,改变这些设置可能会影响到表格的整体外观和用户体验。如果只是偶尔的需求,局部更改某个单元格可能更为合适。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值