QWidget控件交互状态的设置

1、控件是否可用、是否显示、是否隐藏、是否编辑、是否为活跃状态。

QWidget控件交互状态的设置

 例如:将按钮设为不可用。

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、是否显示隐藏:指系统在绘制控件时是否需要绘制指定的控件。

想要监听某一个控件是否被绘制,重写相关的绘制方法。

只有当窗口被绘制他才会真正的被显示出来。

QWidget控件交互状态的设置

 ①

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()的区别

需要注意我们在显示控件的过程中是先绘制父控件、在绘制子控件;若父控件都没有显示,绘制子控件不会起作用。

怎么获取控件的显示或隐藏状态 

QWidget控件交互状态的设置

 区别:visible()代表控件的最终状态是否被我们可见(被其他控件挡住也属于可见),hide()仅仅是相对于父控件是否可见(相对于父控件是否隐藏,父控件存在的情况下,控件则不被隐藏)。

QWidget控件交互状态的设置

 情况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)

设置窗口是否被修改。

QWidget控件交互状态的设置

 # 想要控制窗口,标识出是否处于被编辑状态

# 首先将标题设置为特定的格式

window.setWindowTitle("交互状态[*]")
window.resize(500, 500)

# 调用modified方法,设置为编辑状态(处于被编辑状态),[]中括号中只能放*,不能放其他字符。

window.setWindowModified(True)

判断是否处于被编辑状态

print(window.isWindowModified())

上一篇:微前端框架qiankun应用及部署


下一篇:函数式组件和类式组件的使用