ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QWidget控件交互状态的设置

2022-01-03 20:32:16  阅读:218  来源: 互联网

标签:控件 绘制 window QWidget 按钮 print btn 交互


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())

标签:控件,绘制,window,QWidget,按钮,print,btn,交互
来源: https://blog.csdn.net/laner__gg/article/details/122287836

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有