• 7454阅读
  • 5回复

[讨论]有关,QLineEdit()类添加按钮的问题? [复制链接]

上一主题 下一主题
离线panqingliang
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-15
我的一个类继承了QLineEdit形成myQLineEdit, 然后我在子类里面添加来那个个QToolButton, 但是, 我怎么吗让这两个按钮刚好在QLineEdit的左右两边呢??前提是, 在别的地方使用这给类的时候, 改变myQLineEdit的时候, 类里面的按钮还是保持在左右两边?
离线kimtaikee

只看该作者 1楼 发表于: 2011-06-15

离线panqingliang
只看该作者 2楼 发表于: 2011-06-16
回 1楼(kimtaikee) 的帖子
kimtaikee
你好,有看过你的那给的那连接, 但是,解决不了我的问题, 应为, 我的控件是继承的QLineEdit, 软化在那个继承的类里面添加的两个QToolButton , 你提供的那个demo是在QWidget窗口内将QLabel和lineEdit连在一起的,而我的那个继承的控件在别的很多地方都要用到的,并且还要做相应的改变,所以你提供的demo不好实现,  我想在请教你, 我的那个控件需求, 能用别的方法实现吗?
离线dbzhang800

只看该作者 3楼 发表于: 2011-06-16
Re:回 1楼(kimtaikee) 的帖子
引用第2楼panqingliang于2011-06-16 11:39发表的 回 1楼(kimtaikee) 的帖子 :
kimtaikee
你好,有看过你的那给的那连接, 但是,解决不了我的问题, 应为, 我的控件是继承的QLineEdit, 软化在那个继承的类里面添加的两个QToolButton , 你提供的那个demo是在QWidget窗口内将QLabel和lineEdit连在一起的,而我的那个继承的控件在别的很多地方都要用到的,并且还要做相应的改变,所以你提供的demo不好实现,  我想在请教你, 我的那个控件需求, 能用别的方法实现吗?


一个简单的例子:
  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. '''
  4. Copyright (C) 2011 dbzhang800#gmail.com
  5. All rights reserved.
  6. '''
  7. try:
  8.     from PySide import QtCore,  QtGui
  9. except ImportError:
  10.     from PyQt4 import QtCore, QtGui
  11.     
  12. class LineEdit(QtGui.QLineEdit):
  13.     u'''自定义QLineEdit的类,左右两端分别放置一个QToolButton'''
  14.     def __init__(self,  parent=None):
  15.         super(LineEdit, self).__init__(parent)
  16.         
  17.         # 创建两个按钮,并为其 设置图标,设置样式,设置光标
  18.         self.leftButton = QtGui.QToolButton(self)
  19.         self.rightButton = QtGui.QToolButton(self)
  20.         self.leftButton.setIcon(self.style().standardIcon(QtGui.QStyle.SP_ArrowLeft))
  21.         self.rightButton.setIcon(self.style().standardIcon(QtGui.QStyle.SP_ArrowRight))
  22.         self.leftButton.setStyleSheet("QToolButton { border: none; padding: 3px; }")
  23.         self.rightButton.setStyleSheet("QToolButton { border: none; padding: 3px; }")
  24.         self.leftButton.setCursor(QtCore.Qt.ArrowCursor)
  25.         self.rightButton.setCursor(QtCore.Qt.ArrowCursor)
  26.         # 在LineEdit中为按钮留出padding位置
  27.         frameWidth = self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
  28.         paddingWidth = self.leftButton.sizeHint().width() + frameWidth + 1
  29.         self.setStyleSheet("QLineEdit{padding-left:%ipx;padding-right:%ipx;}" % (paddingWidth,  paddingWidth))
  30.         # 设置LineEdit的最小大小
  31.         msz = self.minimumSizeHint()
  32.         buttonSize = self.leftButton.sizeHint()
  33.         self.setMinimumSize(max(msz.width(), buttonSize.width() + frameWidth*2 +2),
  34.                                     max(msz.height(), buttonSize.height() + frameWidth*2 +2))
  35.                                     
  36.     def resizeEvent(self, evt):
  37.         u'''控件大小变化时,调整两个按钮的位置'''
  38.         buttonSize = self.leftButton.sizeHint()
  39.         frameWidth = self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
  40.         self.leftButton.move(self.rect().right() - frameWidth - buttonSize.width(),
  41.                              (self.rect().bottom() + 1 - buttonSize.height())/2)
  42.         self.rightButton.move(self.rect().left()+frameWidth,
  43.                              (self.rect().bottom() + 1 - buttonSize.height())/2)
  44.         
  45. if __name__ == '__main__':
  46.     import sys
  47.     app = QtGui.QApplication(sys.argv)
  48.     w = LineEdit()
  49.     w.show()
  50.     sys.exit(app.exec_())



离线panqingliang
只看该作者 4楼 发表于: 2011-06-16
回 3楼(dbzhang800) 的帖子
楼主, 我想问问这段代码是什么风格??
离线panqingliang
只看该作者 5楼 发表于: 2011-06-16
问题解决, 多谢楼主
快速回复
限100 字节
 
上一个 下一个