PyQt5中的按钮1-QPushButton,QRadioButton,QCheckBox
官方链接:
https://doc.qt.io/archives/qtforpython-5.12/PySide2/QtWidgets/QPushButton.html

class Btn(QAbstractButton):
# 子类化,使得可以实例化对象,同时要重写paintEvent函数
def paintEvent(self, evt):
painter = QPainter(self)
pen = QPen(QColor(0, 0, 0), 6) # 颜色,和画笔大小
painter.setPen(pen)
painter.drawText(20, 20, self.text()) # 将字写在按钮上面
painter.drawEllipse(0, 0, 100, 300) # 画一个椭圆
class Window(QWidget):
def __init__(self):
super().__init__()
self.setup_ui()
def setup_ui(self):
self.setWindowTitle("自定义按钮")
self.resize(300, 500)
btn = Btn(self)
btn.setText("ABCDEF")
btn.clicked.connect(lambda: print("按钮被按"))
self.setVisible(True) # 设置为可见
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
| 属性 | 函数 | 描述 |
|---|---|---|
| checkable | isCheckable() | 提示按钮是否是可选中的,当时True时,按钮分两种状态,按下和弹起,否则是按下去马上弹起,如果为checkbox或者radiobox,就是无法选中 |
| setCheckable() | 设置按钮是否可被选中 | |
| checked | isChecked() | 按钮是否被选中 |
| setChecked() | 设置按钮是选中还是未选中 | |
| down | isDown() | 按钮按下了吗? |
| setDown(Bool) | 设置按钮是否按下 | |
| icon | setIcon() | 设置图标 |
| setIconSize() | 设置图标大小 | |
| short | setShortcut() | 为按钮设置快捷键 |
| 名称设置快捷键 | 如名字为:“&Save”的按钮, 其快捷键为“Alt+S” | |
| text | setText() | 设置按钮的显示文本 |
| text() | 返回按钮的显示文本 | |
| setVisible() | 设置按钮是否可见,当不可见时,连所占的位置也消失了 | |
| isVisible() | 返回按钮的可见状态 |
| 信号 | 描述 |
|---|---|
| pressed | 当鼠标指针在按钮上并按下左键时触发该信号,一直按着或者按下并释放都会产生 |
| released | 当鼠标左键被释放时触发该信号 |
| clicked | 当鼠标左键被按下,一直按着或者释放时,或者快捷键被按着或者释放时触发该信号 |
| toogled | 当按钮的checkable设置为True时,其状态发生改变时触发该信号 |
| 方法 | 描述 |
|---|---|
| btn.setAutoRepeat() | 设置自动重复,参数为True或者False |
| autoRepeat() | 获取按钮是否处在自动重复状态 |
| setAutoRepeatDelay(ms) | 为按钮设置重复延时,在按钮被按下到首次发送信号之间的时间间隔 |
| autoRepeateDelay() | 返回按钮按下时重复功能开始的延时时间 |
| setAutoRepeatInterval(ms) | 自动重复触发按钮的各信号每次之间的时间间隔,单位是毫秒。 |
| autoRepeatInterval() | 获取重复间隔 |
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
class PushBtn(QWidget):
def __init__(self):
super().__init__()
self.setup_ui()
def setup_ui(self):
self.setWindowTitle("PushButton实例")
# 直接在创建的时候设定其text
self.btn1 = QPushButton("Checkable示例")
self.btn1.setIcon(QIcon(r"F:\study\python\qt_study\qt_project\boy.jpg"))
self.btn1.setCheckable(True)
print(self.btn1.text())
print(self.btn1.isCheckable())
self.btn1.setAutoRepeat(True) # 开启重复
self.btn1.setAutoRepeatInterval(500) # 设置重复的间隔ms
self.btn1.setAutoRepeatDelay(1000) # 设置首次按下按钮后delay多长时间开始第二次响应
print(self.btn1.autoRepeat())
print(self.btn1.autoRepeatInterval())
print(self.btn1.autoRepeatDelay())
self.btn2 = QPushButton("Short示例")
self.btn2.setShortcut("Alt+B") #设置快捷键
self.btn3 = QPushButton("Visible示例")
self.btn3.setVisible(True) #当设置setVisible为False时,占位也会消失
self.btn4 = QPushButton("Enable示例")
self.btn4.setEnabled(True) #当设置setEnabled为False时,按钮会变灰
vbox = QVBoxLayout(self)
vbox.addWidget(self.btn1)
vbox.addWidget(self.btn2)
vbox.addWidget(self.btn3)
vbox.addWidget(self.btn4)
self.btn1.pressed.connect(lambda: print("Checkable示例被按下"))
self.btn2.clicked.connect(lambda: print("Short示例被按下"))
self.btn3.clicked.connect(lambda: (self.btn3.setVisible(False), print("Visible示例被按下")))
self.btn4.clicked.connect(lambda: (self.btn4.setEnabled(False), print("Short示例被按下")))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = PushBtn()
window.show()
sys.exit(app.exec_())
| 方法 | 描述 |
|---|---|
| isChecked() | 按钮是否被选中 |
| setChecked() | 设置按钮是选中还是未选中 |
| setText() | 设置按钮的显示文本 |
| text() | 返回按钮的显示文本 |
| setIcon() | 设置小图标 |
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
class RadioBtn(QWidget):
def __init__(self):
super().__init__()
self.setup_ui()
def setup_ui(self):
self.setWindowTitle("RadioButton实例")
# 直接在创建的时候设定其text
self.rbtn_male = QRadioButton("男")
self.rbtn_male.setIcon(QIcon(r"F:\study\python\qt_study\qt_project\boy.jpg"))
self.rbtn_male.setChecked(True)
print(self.rbtn_male.text())
print(self.rbtn_male.isChecked())
self.rbtn_female = QRadioButton("女")
self.rbtn_female.setShortcut("Alt+B")
vbox = QVBoxLayout(self)
vbox.addWidget(self.rbtn_male)
vbox.addWidget(self.rbtn_female)
self.rbtn_male.toggled.connect(self.slot_btn_state)
self.rbtn_female.toggled.connect(self.slot_btn_state)
def slot_btn_state(self):
if self.sender() == self.rbtn_male:
if self.rbtn_male.isChecked():
print("你是个帅哥!")
elif self.sender() == self.rbtn_female:
if self.rbtn_female.isChecked():
print("你是个大美妞!")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = RadioBtn()
window.show()
sys.exit(app.exec_())
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
class CheckBox(QWidget):
def __init__(self):
super().__init__()
self.setup_ui()
def setup_ui(self):
self.setWindowTitle("CheckBox实例")
self.cb_math = QCheckBox("数学")
self.cb_math.setIcon(QIcon(r"F:\study\python\qt_study\qt_project\boy.jpg"))
self.cb_math.setChecked(True) # 设置初始状态为选中
self.cb_math.stateChanged.connect(self.slot_cb_state)
self.cb_physics = QCheckBox("物理")
self.cb_physics.stateChanged.connect(self.slot_cb_state)
self.cb_chemistry = QCheckBox("化学")
self.cb_chemistry.stateChanged.connect(self.slot_cb_state)
self.cb_english = QCheckBox("英语")
self.cb_english.setTristate(True)
self.cb_english.stateChanged.connect(self.slot_cb_state)
vbox = QVBoxLayout(self)
vbox.addWidget(self.cb_math)
vbox.addWidget(self.cb_physics)
vbox.addWidget(self.cb_chemistry)
vbox.addWidget(self.cb_english)
def slot_cb_state(self):
if self.sender() == self.cb_math:
print(self.cb_math.checkState())
if self.cb_math.isChecked():
print("数学被选中!")
else:
print("数学被无视!")
elif self.sender() == self.cb_physics:
if self.cb_physics.isChecked():
print("物理被选中!")
else:
print("物理被无视!")
elif self.sender() == self.cb_chemistry:
if self.cb_chemistry.isChecked():
print("化学被选中!")
else:
print("化学被无视!")
elif self.sender() == self.cb_english:
print(self.cb_english.checkState())
if self.cb_english.checkState() == 1:
print("英语在犹豫!")
elif self.cb_english.checkState() == 2:
print("英语被选中!")
else:
print("英语被无视!")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = CheckBox()
window.show()
sys.exit(app.exec_())
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA