我是Kivy的新手,我试图为以后的计划部分提供一种模板。 现在我被困住了,因为当我尝试调整它们的大小时,我所有的.png圆形圆形按钮都获得了“边缘/凹凸”之王。
我与其他多个.png一起尝试过,因此我非常确定问题不在.png本身之内。
这是我的代码(为了方便查找相关部分,我对其进行了缩短。如果您觉得需要更多代码,我当然可以添加它):
test.kv
#:kivy 1.0.9
<MainWindow>:
BoxLayout:
#[shortened for readability reasons]
BoxLayout:
#[shortened for readability reasons]
BoxLayout:
#[shortened for readability reasons]
AnchorLayout:
#[shortened for readability reasons]
FloatLayout:
canvas:
Rectangle:
pos: self.pos
size: self.size
Button:
id: leftButton
background_normal: 'assets/graphics/buttons/dummy.png'
background_down: 'assets/graphics/buttons/.png'
size_hint: .15, .15
pos_hint: {'x':root.size_hint_x/2, 'y':root.size_hint_y/2}
也许这里的某人有一个问题是什么以及如何解决? 请记住,我想在.kv文件中修复该问题(如果可能),以便以后可以更轻松地重用它。
另一个小问题是其他一些按钮的位置。我想让它们与右侧对齐,但是我找不到如何访问按钮本身的宽度,因此我可以从self.width中减去它(如果我正确的话,它应该是周围布局的宽度) )
有什么建议吗?
在此期间,我做了一些测试,以确保文件类型不是这里的问题。据我所知,其他的最常见的文件类型都支持透明度,因此我尝试使用.gif和.tif。 结果与.png
相同为弄清设计的外观,我将添加另一张图片:
所以我认为我必须使用FloatLayout来做到这一点。我想像在pyqt中那样使用网格来做到这一点,但是在奇异的情况下,无法定义应该放置小部件的单元格,也不能给它一个colspan或rowpan。至少我已经读过了。如果我错了,请纠正我。
好的,到目前为止ikolim的解决方案仍然有效,但是又产生了一个问题:我不能再使用background_normal和background_down了,但是我觉得我必须向用户提供视觉反馈-例如-单击按钮并按住。我以为,因为我使用ButtonBehavier,所以我也可以使用background-stuff。但这似乎并非如此。有人可以给我提示如何解决这个问题的人吗?
更新:我得到了视觉反馈,现在可以工作了。解决的方法是如此简单,以至于直到上周五,我才忽略了它(直到现在,我还是会回到有互联网的计算机上)。 因此,对于遇到类似问题的读者来说,这是我的解决方案: 现在,我只使用on_press和on_release侦听器,并将其中的图像源从myPic.png更改为myPic_clicked.png,反之亦然。
因此,问题已解决,我将写出完整的答案,并在几天后关闭此问题。 但是直到那时,我真的很想知道是否有人有一个主意,为什么我会遇到麻烦。一方面是为了全面了解猕猴桃,另一方面是为了避免将来出现该问题。
预先感谢!
答案 0 :(得分:0)
def convertDCM(PathDCM) :
data = []
for dirName, subdir, files in os.walk(PathDCM):
for filename in sorted(files):
ds = pydicom.dcmread(PathDCM +'/' + filename)
im = fromarray(ds.pixel_array)
im = keras.preprocessing.image.img_to_array(im)
im = cv2.resize(im,(300,300))
data.append(im)
return data
PathDCM = '/home/Desktop/FULL_BALANCED_BW/'
data = convertDCM(PathDCM)
class_names = ['Normal','Abnormal'] #Normal = 0, Abnormal = 1
read = pd.read_excel('/home/FULL_REDUCED_BALANCED_DATA.xlsx')
labels = read.iloc[:,2].tolist()
#scale the raw pixel intensities to the range [0,1]
data = np.array(data, dtype="float")/255.0
labels = np.array(labels,dtype ="uint8")
#splitting data into training and testing
(trainX, testX, trainY, testY) = train_test_split(
data,labels,
test_size=0.2,
random_state=42)
img_width, img_height = 300, 300 #InceptionV3 size
train_samples = 1000
validation_samples = 200
epochs = 10
batch_size = 32
base_model = keras.applications.InceptionV3(
weights ='imagenet',
include_top=False,
input_shape = (img_width,img_height,3))
#Classifier Model ontop of Convolutional Model
model_top = keras.models.Sequential()
model_top.add(keras.layers.GlobalAveragePooling2D(input_shape=base_model.output_shape[1:], data_format=None)),
model_top.add(keras.layers.Dense(450,activation='relu'))
model_top.add(keras.layers.Dropout(0.5))
model_top.add(keras.layers.Dense(1,activation = 'sigmoid'))
model = keras.models.Model(inputs = base_model.input, outputs = model_top(base_model.output))
#Compiling model using Adam Optimizer
model.compile(optimizer = keras.optimizers.Adam(
lr=0.00002,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-08),
loss='binary_crossentropy',
metrics=['accuracy'])
#Image Processing and Augmentation
train_datagen = keras.preprocessing.image.ImageDataGenerator(
zoom_range = 0.1,
width_shift_range = 0.2,
height_shift_range = 0.2,
horizontal_flip = True,
fill_mode ='nearest')
val_datagen = keras.preprocessing.image.ImageDataGenerator()
train_generator = train_datagen.flow(
trainX,
trainY,
batch_size=batch_size,
shuffle=True)
validation_generator = val_datagen.flow(
testX,
testY,
batch_size=batch_size)
#Training the model
history = model.fit_generator(
train_generator,
steps_per_epoch = train_samples//batch_size,
epochs = epochs,
validation_data = validation_generator,
validation_steps = validation_samples//batch_size)
答案 1 :(得分:0)
好吧,似乎没有人知道原始问题是什么,这里至少有一个很好用的解决方案。
ikolims的答案几乎是完全正确的,我想对此表示敬意。但这也错过了-至少对我来说-重要的部分。这是他的代码。之后,我将解释缺少的内容:
from kivy.lang import Builder
from kivy.base import runTouchApp
runTouchApp(Builder.load_string('''
#:kivy 1.11.0
<CustomButton@ButtonBehavior+Image>:
GridLayout:
rows: 1
canvas:
Rectangle:
pos: self.pos
size: self.size
CustomButton:
id: Button0
source: './dummy.png'
size_hint: .15, .15
pos_hint: {'x':root.size_hint_x/2, 'y':root.size_hint_y/2}
on_release:
print('CustomButton clicked')
CustomButton:
id: Button1
source: './dummy.png'
size_hint: .15, .15
pos_hint: {'x':root.size_hint_x/2, 'y':root.size_hint_y/2}
on_release:
print('CustomButton clicked')
CustomButton:
id: Button2
source: './dummy.png'
size_hint: .15, .15
pos_hint: {'x':root.size_hint_x/2, 'y':root.size_hint_y/2}
on_release:
print('CustomButton clicked')
CustomButton:
id: Button3
source: './dummy.png'
size_hint: .15, .15
pos_hint: {'x':root.size_hint_x/2, 'y':root.size_hint_y/2}
on_release:
print('CustomButton clicked')
'''))
问题是,如果我们以此方式进行操作,则那些带有颠簸的错误将消失。但是background_normal和background_down不再起作用了。解决方案是改用on_pressed和on_release并在其中更改源。