Python图形界面不够美?三行代码全面美化你的Tkinter界面
Posted 陆雅各
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python图形界面不够美?三行代码全面美化你的Tkinter界面相关的知识,希望对你有一定的参考价值。
文章目录
前言
当你构造了自己的图形界面之后,我想下一步要想的就是界面的美化吧。最开始,我们大多会通过“前后对正、左右标齐”的思维合理安排自己的小部件,就像下面这样。
整体看着还是不错的,最起码在布局上看着是整齐的感觉,而不是“东倒西歪”的样子。除此之外,我们还可以通过简单的两行代码,为自己的窗口加上名字、图标。
TOP6.title("油品黏度之数据分析 作者:陆雅各")
TOP6.iconbitmap('Viper_Mark_II.ico')#指定图标
图标的格式我们就要要用到“.ico”的格式,我们可以选择自己喜欢的图片在图标转换网站进行转换即可。
当然除此之外,我们还会对部件的相关“属性”进行设置来达到美化的效果,这样的知识当你在百度搜索“tkinter的美化”就会有很多的相关教程,大部分都是一样的,可以简单的归为一类,就是教会你对部件的外观、颜色的一个设置。
当你慢慢的学会了一些简单的属性设置之后,会发现界面依然会看起来比较的鸡肋,没有那么的美观,好像是90年代的电脑程序一样“古老”。所以,想要让tkinter看起来像现代的界面这样“美观、富有科技感”还是无能为力的。
所以我今天要介绍的这个模块就是要让tkinter模块穿上**“现代的美感外衣”**—— ttkbootstrap
该链接为0.5版本的链接,1.0版本已发布https://ttkbootstrap.readthedocs.io/en/latest/index.html
简单的初探ttkbootstrap,深入了解靠你自己
ttkbootstrap有很多主题样式供我们调用,就像是穿衣服一样,喜欢哪一件,拿起来穿上即可,而ttkbootstrap也仅仅需要在我们的源码中加入三行代码,即可实现“主题的调用”
安装ttkbootstrap
python -m pip install ttkbootstrap
简单的主题调用
style = Style()
style = Style(theme='sandstone')
#想要切换主题,修改theme值即可,有以下这么多的主题,自己尝试吧:['vista', 'classic', 'cyborg', 'journal', 'darkly', 'flatly', 'clam', 'alt', 'solar', 'minty', 'litera', 'united', 'xpnative', 'pulse', 'cosmo', 'lumen', 'yeti', 'superhero', 'winnative', 'sandstone', 'default']
TOP6 = style.master
#这两行代码在自己原基础的代码上加入即可,放在代码的最开端部分,也就是在窗口创建代码之前
主题调用效果
通过以上的效果,我们可以感受到ttkbootstrap的强大,通过简单的三行代码,我们就可以为我们的界面加上“现代视觉的主题”,也是挺带劲的。
结尾
由于自己的水平有限,我只分享最简单的部分,而对于ttkbootstrap库,官方文档有更详细的讲解,从它的起源以及原理,每一个部分讲解的都是非常的清楚。我也非常喜欢这个作者,真的很用心的去介绍。
喜欢我的希望大家给个“三连”,加个“关注”,一切学习进步。
PyQt5美化你的GUI界面
目录
1 圆点选择选项设置
效果展示
代码参考
#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import *
class qt_view(QWidget):
def __init__(self):
super(qt_view, self).__init__()
self.resize(600, 250)
self.setWindowTitle("圆点选择")
self.radioButton_1 = QtWidgets.QRadioButton(self)
self.radioButton_1.setGeometry(QtCore.QRect(230, 100, 89, 16))
self.radioButton_1.setStyleSheet("font-family:微软雅黑; color:black;")
self.radioButton_1.setObjectName("radioButton_1")
self.radioButton_2 = QtWidgets.QRadioButton(self)
self.radioButton_2.setGeometry(QtCore.QRect(310, 100, 89, 16))
self.radioButton_2.setStyleSheet("font-family:微软雅黑; color:black;")
self.radioButton_2.setObjectName("radioButton_2")
translate = QtCore.QCoreApplication.translate
self.radioButton_1.setText(translate("Form", "选项1"))
self.radioButton_2.setText(translate("Form", "选项2"))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
my = qt_view()
my.show()
app.exec_()
2 选项按钮设置
效果展示
代码参考
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import *
class qt_view(QWidget):
def __init__(self):
super(qt_view, self).__init__()
self.resize(600, 250)
self.setWindowTitle("圆灰按钮")
button_open_img = QPushButton(self)
button_open_img.setText("打开图片")
button_open_img.move(250, 100)
button_open_img.setFixedSize(150, 50)
button_open_img.setStyleSheet("QPushButton{\\n"
" background:orange;\\n"
" color:white;\\n"
" box-shadow: 1px 1px 3px;font-size:18px;border-radius: 24px;font-family: 微软雅黑;\\n"
"}\\n"
"QPushButton:pressed{\\n"
" background:black;\\n"
"}")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
my = qt_view()
my.show()
app.exec_()
3 关闭弹窗设置
效果展示
代码参考
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import *
class qt_view(QWidget):
def __init__(self):
super(qt_view, self).__init__()
print("关闭弹窗")
result = QMessageBox.question(self, "注意!", "您真的要关闭吗?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if result == QMessageBox.Yes:
QMessageBox.information(self, "消息", "谢谢使用!")
quit()
else:
QMessageBox.information(self, "消息", "正在返回...")
quit()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
my = qt_view()
my.show()
app.exec_()
4 关闭程序弹窗
效果展示
代码参考
from PyQt5 import QtWidgets
import sys
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(600, 320)
class Dialog(QtWidgets.QMainWindow):
def closeEvent(self, event):
reply = QtWidgets.QMessageBox.question(self,
'本程序',
"是否要退出程序?",
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
QtWidgets.QMessageBox.No)
if reply == QtWidgets.QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
dialog = Dialog()
ui = Ui_Dialog()
ui.setupUi(dialog)
dialog.show()
sys.exit(app.exec_())
5 设置关闭按钮
效果展示
代码参考
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class gui_view(QWidget):
def __init__(self):
super(gui_view, self).__init__()
self.resize(500, 350)
self.setWindowFlags(Qt.FramelessWindowHint) # 去边框
# # self.setAttribute(Qt.WA_TranslucentBackground) # 设置窗口背景透明
button_red = QPushButton(self)
button_red.move(20, 20)
button_red.setFixedSize(20, 20)
button_red.setStyleSheet("QPushButton{\\n"
" background:#CE0000;\\n"
" color:white;\\n"
" box-shadow: 1px 1px 3px;border-radius: 10px;\\n"
"}\\n"
"QPushButton:hover{ \\n"
" background:red;\\n"
"}\\n"
"QPushButton:pressed{\\n"
" border: 1px solid #3C3C3C!important;\\n"
" background:black;\\n"
"}")
button_red.clicked.connect(self.quit_button)
button_orange = QPushButton(self)
button_orange.move(50, 20)
button_orange.setFixedSize(20, 20)
button_orange.setStyleSheet("QPushButton{\\n"
" background:orange;\\n"
" color:white;\\n"
" box-shadow: 1px 1px 3px;border-radius: 10px;\\n"
"}\\n"
"QPushButton:hover{ \\n"
" background:yellow;\\n"
"}\\n"
"QPushButton:pressed{\\n"
" border: 1px solid #3C3C3C!important;\\n"
" background:black;\\n"
"}")
button_green = QPushButton(self)
button_green.move(80, 20)
button_green.setFixedSize(20, 20)
button_green.setStyleSheet("QPushButton{\\n"
" background:green;\\n"
" color:white;\\n"
" box-shadow: 1px 1px 3px;border-radius: 10px;\\n"
"}\\n"
"QPushButton:hover{ \\n"
" background:#08BF14;\\n"
"}\\n"
"QPushButton:pressed{\\n"
" border: 1px solid #3C3C3C!important;\\n"
" background:black;\\n"
"}")
def quit_button(self):
quit()
if __name__ == '__main__':
app2 = QtWidgets.QApplication(sys.argv)
my = gui_view()
my.show()
app2.exec_()
6 设置背景
效果展示
代码参考
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import *
from PyQt5 import QtGui
class gui_view(QWidget):
def __init__(self):
super(gui_view, self).__init__()
self.resize(1200, 750)
# self.setStyleSheet("background-image: url(:F:/background.jpg);")
self.setWindowTitle("设置背景图片")
window_pale = QtGui.QPalette()
window_pale.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap("F:/background.jpg")))
self.setPalette(window_pale)
if __name__ == '__main__':
app2 = QtWidgets.QApplication(sys.argv)
my = gui_view()
my.show()
app2.exec_()
7 下拉列表框设置
效果展示
代码参考
import sys
from PyQt5.QtWidgets import QWidget, QComboBox, QApplication
class ComboxDemo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('下拉列表框')
self.resize(700, 400)
# 实例化QComBox对象
self.cb = QComboBox(self)
self.cb.move(100, 20)
# 单个添加条目
self.cb.addItem('选项1')
self.cb.addItem('选项2')
# 多个添加条目
self.cb.addItems(['选项3', '选项4', '选项5'])
self.cb.currentIndexChanged[str].connect(self.print_value)
def print_value(self, value):
print(value)
if __name__ == '__main__':
app = QApplication(sys.argv)
comboxDemo = ComboxDemo()
comboxDemo.show()
sys.exit(app.exec_())
8 等待时显示进度条
效果展示
代码参考
from PyQt5.QtWidgets import QMainWindow, QProgressBar, QApplication, QLabel, QStatusBar, QPushButton
import sys
class SampleBar(QMainWindow):
def __init__(self, parent=None):
super(SampleBar, self).__init__(parent)
self.setMinimumSize(400, 100)
self.statusBar = QStatusBar()
self.statusBar.setStyleSheet('QStatusBar::item {border: none;}')
self.setStatusBar(self.statusBar)
self.progressBar = QProgressBar()
self.label = QLabel()
self.label.setText("加载中,请稍后... ")
self.statusBar.addPermanentWidget(self.label, stretch=2)
self.statusBar.addPermanentWidget(self.progressBar, stretch=4)
self.progressBar.setRange(0, 100)
self.progressBar.setMinimum(0)
self.progressBar.setMaximum(0)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = SampleBar()
main.show()
sys.exit(app.exec_())
持续更新中...
以上是关于Python图形界面不够美?三行代码全面美化你的Tkinter界面的主要内容,如果未能解决你的问题,请参考以下文章