Python 在Windows上使用PySide/PyQT删除QPushButton周围奇怪的一像素空间
这是我当前的代码 导入系统 从PySide6.QtWidgets导入( QApplication, QGridLayout, QProgressBar, QPushButton, QTableWidget, QWidget ) 类窗口(QWidget): 定义初始化(自): super()。\uuuu init\uuuuu() self.setWindowTitle(“示例”) 布局=QGridLayout() 布局。设置内容边缘(6,6,6,6) addWidget(QTableWidget(),0,0,1,3) bar=QProgressBar() bar.设定值(50) bar.setTextVisible(False) layout.addWidget(条、1、0、1、2) btn=QPushButton(“确定”) layout.addWidget(btn,1,2,1,1) self.setLayout(布局) 如果名称=“\uuuuu main\uuuuuuuu”: app=QApplication(sys.argv) window=window() window.show() sys.exit(app.exec_()) 正如你所见,按钮周围有一个奇怪的单像素空间 有办法删除它吗Python 在Windows上使用PySide/PyQT删除QPushButton周围奇怪的一像素空间,python,windows,pyqt5,pyside,pyside2,Python,Windows,Pyqt5,Pyside,Pyside2,这是我当前的代码 导入系统 从PySide6.QtWidgets导入( QApplication, QGridLayout, QProgressBar, QPushButton, QTableWidget, QWidget ) 类窗口(QWidget): 定义初始化(自): super()。\uuuu init\uuuuu() self.setWindowTitle(“示例”) 布局=QGridLayout() 布局。设置内容边缘(6,6,6,6) addWidget(QTableWidget(
我尝试使用CSS并设置负边距,但没有成功。这完全取决于QStyle,显然在Windows上,按钮的边距比其他小部件稍大 这不能通过使用样式表来解决,除非为所有按钮状态(正常、按下、禁用等)提供带有边框的完整样式表 只有两种解决方案:绕过小部件上的绘制,或使用proxystyle
paintEvent()
覆盖
QProxyStyle
我有
AttributeError:'PySide6.qtwidts.QCommonStyle'对象在第一种方法中没有属性“baseStyle”
。第二种方法是在app.style().objectName()=='windowsvista':@0lan抱歉的情况下使用。将该行更改为self.proxy().baseStyle().objectName()
。对于第一种方法,仅self.style().proxy().objectName()!='windowsvista':
正在运行。我也在Linux上试过。@0lan抱歉,我弄错了方法,以为这行代码是为代理类写的。我会相应地编辑这篇文章。
class BiggerButton(QtWidgets.QPushButton):
def paintEvent(self, event):
if self.style().proxy().objectName() != 'windowsvista':
super().paintEvent(event)
return
opt = QtWidgets.QStyleOptionButton()
self.initStyleOption(opt)
opt.rect.adjust(-1, -1, 1, 1)
qp = QtWidgets.QStylePainter(self)
qp.drawControl(QtWidgets.QStyle.CE_PushButton, opt)
class Window(QtWidgets.QWidget):
def __init__(self):
# ...
btn = BiggerButton("OK")
class Proxy(QtWidgets.QProxyStyle):
def drawControl(self, ctl, opt, qp, widget=None):
if ctl == self.CE_PushButton:
opt.rect.adjust(-1, -1, 1, 1)
super().drawControl(ctl, opt, qp, widget)
# ...
app = QtWidgets.QApplication(sys.argv)
if app.style().objectName() == 'windowsvista':
app.setStyle(Proxy())