QTabWidget - 标签图标不在中心

时间:2017-12-08 11:43:01

标签: qt tabs widget icons tabwidget

我有一个带有六个标签的QTabWidget,所有标签都有一个图标 - 但图标不在标签的中心:

TabIcons

到目前为止我做了什么:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from mpl_toolkits.basemap import Basemap

# Read in data from CSV
filename = 'wg_weather1_fixed.csv'
readcsv = pd.read_csv(filename)

temp = readcsv.Temperature_degC
wind_speed_kt = readcsv.Wind_Speed_kt
Wind_Direction = readcsv.Wind_Direction
lat = readcsv.Latitude
lon = readcsv.Longitude

Wind_speed_2 = wind_speed_kt*1.852 # Convert from knots to KpH

# extract U and V components
WG_wind_U = Wind_speed_2 * np.sin((360-Wind_Direction)*np.pi/180)
WG_wind_V = -Wind_speed_2*np.cos((360-Wind_Direction)*np.pi/180)

m = Basemap(projection='merc',llcrnrlat=-30.2,urcrnrlat=-29,\
          llcrnrlon=30.8,urcrnrlon=32.2,lat_ts=5,resolution='i')

# Grid the co-ordinates
X,Y = np.meshgrid(lon,lat)
lons,lats = m(X,Y) # convert the co-ordinates to fit on the map

# Create colour bar
norm = matplotlib.colors.Normalize()
norm.autoscale(temp)
cm = matplotlib.cm.CMRmap # selecting the colourmap

sm = matplotlib.cm.ScalarMappable(cmap=cm, norm=norm)
sm.set_array([])

# Plot
q = m.quiver(lons[0,:],lats[:,0],WG_wind_U,WG_wind_V,color=cm(norm(temp)))

m.fillcontinents(color='#cc9955', zorder = 0)

# Latitudes
parallels = m.drawparallels(np.arange(-30.2,-29.,0.5))
m.drawparallels(parallels,labels=[True,False,False,True])
# Longitudes
meridians = m.drawmeridians(np.arange(30.8,32.2,0.5))
m.drawmeridians(meridians,labels=[True,False,False,True])

#plt.xlabel('Longitude')
#plt.ylabel('Latitude')
plt.quiverkey(q,0.9, 0.05, 30,'30 KpH',labelpos='W')
cbar = plt.colorbar(sm)
cbar.set_label('Air Temperature')
plt.title('Wind velocity shaded by air temperature') 

plt.show()

tabWidget->setStyleSheet("QTabBar::tab {width: 40px; height: 40px;}"
                        "QTabBar::tab:selected {background: lightblue;}");
tabWidget->setIconSize(QSize(40, 40));
tabWidget->addTab("widget", QIcon("iconPath"), ""); //<--for all six tabs

为什么会发生这种情况的任何想法,以及我如何解决它?

2 个答案:

答案 0 :(得分:4)

我也一直在努力解决这个问题。以下是我如何解决它。

<强>背景

我试图让左侧标签菜单运行,它使用图标作为指标(用户会看到什么),但是我遇到了问题:

enter image description here

我在“属性编辑器”中使用currentTabIcon设置的图标与底部对齐(由于我使用的是West方向,因此预计会出现这种情况。通常情况下,会选择North方向并且图标将在左侧。)

我把它作为我的样式表:

QTabBar::tab:hover {
	background-color: #212121;
}

QTabBar::tab:selected{
    background-color: #313131;
}
QTabBar::tab {
    background-color: #111111;	
	height:70px;
	width: 70px;
	border: none;
}

现在,尝试在这篇文章中找到的建议solution,我设置边距没有达到预期效果,实际上它根本没有效果。

<强>解决方案:

在玩了一些CSS属性之后,我发现设置padding-toppadding-bottom给了我想要的结果。

enter image description here

添加以下行:

	padding-top: -15px;
	padding-bottom: 15px

解决了我的问题,但需要根据您的需要进行更改。

我的最终样式表类似于:

QTabBar::tab:hover {
	background-color: #212121;
}

QTabBar::tab:selected{
    background-color: #313131;
}
QTabBar::tab {
    background-color: #111111;	
	height:70px;
	width: 70px;
	border: none;
	margin: 0px;
	padding-top: -15px;
	padding-bottom: 15px
}

答案 1 :(得分:1)

如果有人和我一样的问题与标签中的图标有关,我会在天和日之后找到一个解决方案来搜索这个问题,这很简单:D

只需将其添加到TabWidget的样式表中:

tabWidget->setStyleSheet("::tab {margin: 0px;}");
                                 ************