1、控件是否可用、是否显示、是否隐藏、是否编辑、是否为活跃状态。
例如:将按钮设为不可用。
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.resize(500, 500)
btn = QPushButton(window)
btn.setText("按钮")
btn.pressed.connect(lambda : print("按钮被点击了"))
# 将按钮设置为不可用
btn.setEnabled(True)
# 输出按钮是否可用
print(btn.isEnabled())
window.show()
sys.exit(app.exec_())
2、是否显示隐藏:指系统在绘制控件时是否需要绘制指定的控件。
想要监听某一个控件是否被绘制,重写相关的绘制方法。
只有当窗口被绘制他才会真正的被显示出来。
①
from PyQt5.Qt import *
import sys
class Window(QWidget):
def paintEvent(self, evt):
print("窗口被绘制")
return super().paintEvent(evt)
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
btn = QPushButton(window)
btn.setText("按钮")
btn.pressed.connect(lambda : print("按钮被点击了"))
# 将按钮设置为不可用
btn.setEnabled(True)
# 输出按钮是否可用
print(btn.isEnabled())
#window.show()
sys.exit(app.exec_())
②使用setVisible()最本质的方法。其他show等方法本质也是调用setVisible()。
#window.show()
#window.setVisible(True)
window.setHidden(False)
③绘制过程中都是先绘制父控件、在绘制对应的子控件。
class Window(QWidget):
def paintEvent(self, evt):
print("窗口被绘制")
return super().paintEvent(evt)
class Btn(QPushButton):
def paintEvent(self, evt):
print("按钮被绘制")
return super().paintEvent(evt)
④按钮被隐藏,最本质的方法就是不让他绘制。当一个窗口及其控件以全部被绘制,当需要隐藏其中的某一项,其实是会将原来的重新绘制一遍,隐藏某个控件则不再绘制(并不是对象是否存在)。
btn.pressed.connect(lambda: btn.setVisible(False))
⑤:isHidden(),isVisible()的区别
需要注意我们在显示控件的过程中是先绘制父控件、在绘制子控件;若父控件都没有显示,绘制子控件不会起作用。
怎么获取控件的显示或隐藏状态
区别:visible()代表控件的最终状态是否被我们可见(被其他控件挡住也属于可见),hide()仅仅是相对于父控件是否可见(相对于父控件是否隐藏,父控件存在的情况下,控件则不被隐藏)。
情况1:输出结果为False,True
window.show()
print(btn.isHidden())
print(btn.isVisible())
情况2:输出结果为False,False(当窗口显示时按钮一定会显示,所以结果是并未被隐藏)
window.show()
print(btn.isHidden())
print(btn.isVisible())
⑥:一个控件能否随另一个控件的显示和隐藏的变化而同步变化,如果是则返回ture,如果不是则返回false。(有一个如果的前提)
# 结果为true,即父控件显示时子控件是否跟着被显示
print(btn.isVisibleTo(window))
⑦是否编辑状态:窗口值为一个编辑或者没有编辑的状态使用户可以区分(通过*标识文件是否被改动)。
方法1:手动监听文件是否被改变,手动设置修改标题。
方案2:使用API。特定格式的标题。setWindowModified(bool)
设置窗口是否被修改。
# 想要控制窗口,标识出是否处于被编辑状态
# 首先将标题设置为特定的格式
window.setWindowTitle("交互状态[*]")
window.resize(500, 500)
# 调用modified方法,设置为编辑状态(处于被编辑状态),[]中括号中只能放*,不能放其他字符。
window.setWindowModified(True)
判断是否处于被编辑状态
print(window.isWindowModified())